From 679b2af17035b8188406b652b70ecaf76880d832 Mon Sep 17 00:00:00 2001 From: Choucri FAHED Date: Thu, 19 Sep 2019 18:13:21 +0200 Subject: [PATCH] Release 6.0.0-beta-1 fix --- README.md | 8 +- pgsql_export.bat => db_export.bat | 0 pgsql_export.sh => db_export.sh | 0 pgsql_import.bat => db_import.bat | 0 pgsql_import.sh => db_import.sh | 0 database_version.bat => db_version.bat | 0 database_version.sh => db_version.sh | 0 reference_data/6.0.0-beta-1/reference.sql | 1684 ++++++++++----------- reference_data/SNAPSHOT/reference.sql | 1684 ++++++++++----------- 9 files changed, 1688 insertions(+), 1688 deletions(-) rename pgsql_export.bat => db_export.bat (100%) rename pgsql_export.sh => db_export.sh (100%) rename pgsql_import.bat => db_import.bat (100%) rename pgsql_import.sh => db_import.sh (100%) rename database_version.bat => db_version.bat (100%) rename database_version.sh => db_version.sh (100%) diff --git a/README.md b/README.md index c0a8e5d..e0e8fc4 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ In case you receive a notification from Amalto for a new release of Platform 6, For that, check that your instance is stopped, then: * Pull the latest version of this repo. -* Set the `PLATFORM6_VERSION` variable in the `.env` file to the desired version. +* Set the `PLATFORM6_VERSION` and `P6CORE_IMAGE_ID` variables in the `.env` file to the desired version. * Carefully read the [migration guide](https://documentation.amalto.com/platform6/master/releases/migration/migration-troubleshooting/) for any additional steps to apply. * Start your instance. @@ -110,10 +110,10 @@ For that, check that your instance is stopped, then: The database version is specified in the `.env` file. If you would like to change it follow these steps: -* First, export all your database data by running `pgsql_export.sh` (Unix) / `pgsql_export.bat` (Windows), while your database is still running with the old version. This will create a dump file in the `database_dumps` folder. +* First, export all your database data by running `db_export.sh` (Unix) / `db_export.bat` (Windows), while your database is still running with the old version. This will create a dump file in the `database_dumps` folder. * Stop your instance by running `stop_platform6.sh` (Unix) / `stop_platform6.bat` (Windows). -* Set the variable `PGSQL_VERSION` in the `.env` file to the desired version, minimum version is 9.6.1. -* Run `pgsql_import.sh` (Unix) / `pgsql_import.bat` (Windows). +* Set the variable `PGSQL_VERSION` in the `.env` file to the desired version, minimum version is 11.3. +* Run `db_import.sh` (Unix) / `db_import.bat` (Windows). * Start your instance by running `start_platform6.sh` (Unix) / `start_platform6.bat` (Windows). ## Troubleshooting diff --git a/pgsql_export.bat b/db_export.bat similarity index 100% rename from pgsql_export.bat rename to db_export.bat diff --git a/pgsql_export.sh b/db_export.sh similarity index 100% rename from pgsql_export.sh rename to db_export.sh diff --git a/pgsql_import.bat b/db_import.bat similarity index 100% rename from pgsql_import.bat rename to db_import.bat diff --git a/pgsql_import.sh b/db_import.sh similarity index 100% rename from pgsql_import.sh rename to db_import.sh diff --git a/database_version.bat b/db_version.bat similarity index 100% rename from database_version.bat rename to db_version.bat diff --git a/database_version.sh b/db_version.sh similarity index 100% rename from database_version.sh rename to db_version.sh diff --git a/reference_data/6.0.0-beta-1/reference.sql b/reference_data/6.0.0-beta-1/reference.sql index 83c1367..1c04bef 100644 --- a/reference_data/6.0.0-beta-1/reference.sql +++ b/reference_data/6.0.0-beta-1/reference.sql @@ -1,842 +1,842 @@ --- --- PostgreSQL database cluster dump --- - -SET default_transaction_read_only = off; - -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; - --- --- Drop databases (except postgres and template1) --- - -DROP DATABASE b2box; - - - - --- --- Drop roles --- - -DROP ROLE b2box; -DROP ROLE postgres; - - --- --- Roles --- - -CREATE ROLE b2box; -ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4'; -CREATE ROLE postgres; -ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS; - - - - - - --- --- PostgreSQL database dump --- - --- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) --- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - -UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1'; -DROP DATABASE template1; --- --- Name: template1; Type: DATABASE; Schema: -; Owner: postgres --- - -CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; - - -ALTER DATABASE template1 OWNER TO postgres; - -\connect template1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres --- - -COMMENT ON DATABASE template1 IS 'default template for new databases'; - - --- --- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres --- - -ALTER DATABASE template1 IS_TEMPLATE = true; - - -\connect template1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres --- - -REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; -GRANT CONNECT ON DATABASE template1 TO PUBLIC; - - --- --- PostgreSQL database dump complete --- - --- --- PostgreSQL database dump --- - --- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) --- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres --- - -CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; - - -ALTER DATABASE b2box OWNER TO postgres; - -\connect b2box - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box --- - -CREATE SCHEMA p6core; - - -ALTER SCHEMA p6core OWNER TO b2box; - --- --- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: --- - -CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; - - --- --- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; - - --- --- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box --- - -CREATE TYPE p6core.itempartitiontype AS ENUM ( - 'LOG', - 'TABLE_DATA', - 'TRANSACTION' -); - - -ALTER TYPE p6core.itempartitiontype OWNER TO b2box; - --- --- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box --- - -CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text - LANGUAGE sql IMMUTABLE STRICT - AS $$ - - - select array_to_string (texts, sep) - - - $$; - - -ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.activeroutingorder ( - name character varying(512) NOT NULL, - content xml NOT NULL -); - - -ALTER TABLE p6core.activeroutingorder OWNER TO b2box; - --- --- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.completedroutingorder ( - name character varying(512) NOT NULL, - content xml NOT NULL -); - - -ALTER TABLE p6core.completedroutingorder OWNER TO b2box; - --- --- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.failedroutingorder ( - name character varying(512) NOT NULL, - content xml NOT NULL -); - - -ALTER TABLE p6core.failedroutingorder OWNER TO b2box; - --- --- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.flyway_schema_history ( - installed_rank integer NOT NULL, - version character varying(50), - description character varying(200) NOT NULL, - type character varying(20) NOT NULL, - script character varying(1000) NOT NULL, - checksum integer, - installed_by character varying(100) NOT NULL, - installed_on timestamp without time zone DEFAULT now() NOT NULL, - execution_time integer NOT NULL, - success boolean NOT NULL -); - - -ALTER TABLE p6core.flyway_schema_history OWNER TO b2box; - --- --- Name: item; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.item ( - datapartition p6core.itempartitiontype NOT NULL, - datatype character varying(64) NOT NULL, - iid1 character varying(256) NOT NULL, - iid2 character varying(96) NOT NULL, - iid3 character varying(96) NOT NULL, - iid4 character varying(96) NOT NULL, - content xml NOT NULL, - inserttime bigint -) -PARTITION BY LIST (datapartition); - - -ALTER TABLE p6core.item OWNER TO b2box; - --- --- Name: log; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.log PARTITION OF p6core.item -FOR VALUES IN ('LOG'); - - -ALTER TABLE p6core.log OWNER TO b2box; - --- --- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.rawbytes ( - id1 character varying(96) NOT NULL, - id2 character varying(96) NOT NULL, - content bytea NOT NULL, - inserttime bigint -); - - -ALTER TABLE p6core.rawbytes OWNER TO b2box; - --- --- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.serviceconfig ( - id1 character varying(512) NOT NULL, - id2 character varying(256) NOT NULL, - id3 character varying(256) NOT NULL, - content jsonb NOT NULL, - bytes bytea, - inserttime bigint -); - - -ALTER TABLE p6core.serviceconfig OWNER TO b2box; - --- --- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.table_data PARTITION OF p6core.item -FOR VALUES IN ('TABLE_DATA'); - - -ALTER TABLE p6core.table_data OWNER TO b2box; - --- --- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.transaction PARTITION OF p6core.item -FOR VALUES IN ('TRANSACTION'); - - -ALTER TABLE p6core.transaction OWNER TO b2box; - --- --- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.activeroutingorder (name, content) FROM stdin; -\. - - --- --- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.completedroutingorder (name, content) FROM stdin; -\. - - --- --- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.failedroutingorder (name, content) FROM stdin; -\. - - --- --- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin; -1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t -2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t -3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t -4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t -5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t -6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t -7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t -8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t -9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t -10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t -11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t -12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t -13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t -14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t -15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t -16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t -17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-06 12:59:24.811813 33 t -18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql 2012373981 b2box 2019-09-06 12:59:24.884128 14 t -19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-06 12:59:24.913329 11 t -20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-06 12:59:24.93409 169 t -21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql 791640323 b2box 2019-09-06 12:59:25.121487 10 t -\. - - --- --- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; -\. - - --- --- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin; -\. - - --- --- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin; -Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "enabled": true, "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 -Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "enabled": true, "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 -_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "enabled": false, "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 -WorkflowTask datamodels {"name": "WorkflowTask", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "05d747b40331bffd64ce9f7aa64c7692", "contentMode": "READ", "description": {"EN": "WorkflowTask Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1562691470454} \N 1562691470561 -2c101aa8e2234e1baf8bbd278ce3732d p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "2c101aa8e2234e1baf8bbd278ce3732d", "appKey": "p6_demo", "status": "6.0.0-beta-1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi52aWV3cyIsIm5hbWUiOiJXb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldvcmtmbG93IFRhc2tzIGZvciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NzgsXCJyZXZpc2lvbklkXCI6XCIyMGY2MTFlYjg2MzUzYjdhNzk3ZGQ2Y2Y3NmQ2ZGExM1wiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1Nzh9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDAzLFwicmV2aXNpb25JZFwiOlwiZjA1MDM1NzA2NGJiMmVmYWU4NTQ3ZmVmZGYzYmY2ZDRcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDAzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTc3ODk3OTgsXCJyZXZpc2lvbklkXCI6XCJmZmM2MTA4MTEzNDU2M2RkODMyZWEwMTI0NTdjODhmNVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIHJvdXRlSWQgPSBcXFwicDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRc1xcXCJcXG5cXG50cnkge1xcbiAgICBwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgICAgIGZyb20oXFxcInRpbWVyOi8vbXlUaW1lcj9wZXJpb2Q9MTBtXFxcIilcXG4gICAgICAgICAgICAgICAgLnRvKCdwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5DcmVhdGVSRlFUcmFuc2FjdGlvbicpXFxuICAgICAgICAgICAgICAgIC5yb3V0ZUlkKHJvdXRlSWQpXFxuICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbihyb3V0ZUlkKVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBwNi51dGlscy5wYXVzZSgpXFxufSBmaW5hbGx5IHtcXG4gIHA2LmNhbWVsLmRlc3Ryb3lSb3V0ZShyb3V0ZUlkKVxcbn1cXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTc3ODk3OTh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDI4LFwicmV2aXNpb25JZFwiOlwiMzlkYTE5NmNkNGNkNTM4YjJiMmU1ZTE1MWU0ZGQ4ZTZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcdGRlZiB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUkZRcz9jcm9uPTArMSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJGUXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UkZRcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUXVvdGVzP2Nyb249MCsyKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UXVvdGVzIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19BY2NlcHRlZD9jcm9uPTArMysqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRBY2NlcHRlZFBPcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfUmVqZWN0ZWQ/Y3Jvbj0wKzQrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UmVqZWN0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X0ZhaWxlZFJvdXRpbmdPcmRlcnM/Y3Jvbj0wKzAvMTUrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMgY291bnRlclxcXCIpXFxuXFx0fVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDI4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5ODQyMjU0OCxcInJldmlzaW9uSWRcIjpcIjc1YTUxMTc2Mjc1MWI5N2U0ODUzYzA0Zjc2MDZlMDRhXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgZXRoQ2xpZW50VVJMID0gcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdjb250cmFjdEFkZHJlc3MnKVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oXFxcIndlYjNqOi8vXFxcIiArIGV0aENsaWVudFVSTCArIFxcXCI/YWRkcmVzcz1cXFwiICsgY29udHJhY3RBZGRyZXNzICsgXFxcIiZvcGVyYXRpb249RVRIX0xPR19GTE9XQUJMRVxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5ODQyMjU0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc4OTkzNzUzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZCgncDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXMnKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzgwN31dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJBcHBDb25maWciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJBcHBDb25maWdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQXBwbGljYXRpb24gQ29uZmlndXJhdGlvbiBUYWJsZVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUzMyxcInJldmlzaW9uSWRcIjpcImY1OTkzMWM0M2Q3YjlkNTc5NzE3ODIxM2FiOTQxMDVkXCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwia2V5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInZhbHVlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInR5cGVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH1dLFwia2V5c1wiOltcImtleVwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MzN9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgyMTksXCJyZXZpc2lvbklkXCI6XCIyOWZmMTM4Y2MzYTliOTk3ZjE1ZDUwMWUzZjljZTc5NFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjE5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRhcHQgV29ya2Zsb3cgU3RlcHMgb24gdGhlIGZseSBsZXZlcmFnaW5nIGEgV29ya2Zsb3cgU3RlcCB1c2VkIGFzIHRlbXBsYXRlIChvcHRpb25hbClcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4MjEsXCJyZXZpc2lvbklkXCI6XCIwOGQyOWRhZWJhN2E0NmNiMjhiYTAwZWZlZDNmYTc0ZVwiLFwibWFpblNjcmlwdFwiOlwicDYucGlwZWxpbmUudmFyaWFibGVzKCkuZWFjaCgpIHsgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIH1cXG5cXG5kZWYgd29ya2Zsb3dTdGVwID0gcDYucGlwZWxpbmUuZ2V0WG1sICd0ZW1wbGF0ZVN0ZXBYbWwnXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy9kZWYgdHJhbnNhY3Rpb25JbmZvID0gcGlwZWxpbmUuZ2V0WG1sICdfREVGQVVMVF8nXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogIEFERCBPTkUgUEFSQU1FVEVSIEJZIExJTkUgVE8gQUNUSU9OICAgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG5kZWYgbXlBY3Rpb24gPSB3b3JrZmxvd1N0ZXAuQWN0aW9ucy5BY3Rpb24uZmluZHtpdC5AaWQgPSAnc2VuZCd9XFxuXFxuaW50IG5iTGluZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnTGluZSBpdGVtcyd9LlZhbHVlLnRleHQoKSlcXG5cXG5kZWYgc3RlcFhtbCA9IGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUoIHdvcmtmbG93U3RlcCApXFxuXFxucDYucGlwZWxpbmUucHV0ICdzdGVwWG1sJywgc3RlcFhtbFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4MjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJJbml0aWFsaXplQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJbml0aWFsaXplQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVwbG95IEJ1bmRsZWQgUmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIFRhYmxlc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTY3OSxcInJldmlzaW9uSWRcIjpcIjc5MDY0ZDkwMmQyZjg3YTVkODE2NjQ4ZmZiNzM2Zjk5XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai50eC5yZXNwb25zZS5Qb2xsaW5nVHJhbnNhY3Rpb25SZWNlaXB0UHJvY2Vzc29yXFxuXFxuXFxuLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnTG9hZGVkIGJ1bmRsZWQgcmVzb3VyY2VzJ1xcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcblN0cmluZyBQNl9UTVAgPSBTeXN0ZW0uZ2V0ZW52KCdCMkJPWF9UTVAnKVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6IFxcXCJmaWxlOi8vLyRQNl9UTVAvcDZfZGVtb19pdGVtcy5jc3ZcXFwiIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDM5OTM1Njc5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODkxMjg0NCxcInJldmlzaW9uSWRcIjpcIjRmMzA5MjhhYjA2YTRhYzhhNWZjNWU0MjA4MjczYzhkXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMDg5MTI4NDR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSZWNlaXZlUkZRVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSZWNlaXZlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYW4gUkZRIChjcmVhdGlvbiBvZiB0aGUgUkZRIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbeKApikgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODIzMixcInJldmlzaW9uSWRcIjpcImQ1YmJhYjk4ZGMxMDljYmIxY2M2Y2FmNjZmNzIwYzM0XCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbi8vIFRoaXMgc2NyaXB0IHJlYWRzIHRoZSBpbmNvbWluZyBSRlEsIHBhcnNlcyBpdHMgY29udGVudCBhbmQgd3JpdGVzIHRoZSB0cmFuc2FjdGlvbiBpbiBQNiBkYXRhYmFzZSB1c2luZyBpdHMgaW50ZXJuYWwgVHJhbnNhY3Rpb25JbmZvIG1vZGVsIChjaGVjayB0aGUgRGF0YSBNb2RlbHMgbWVudSBmb3IgbW9yZSBpbmZvKVxcbmRlZiByZnFDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIGFwcGxpY2F0aW9uSWQgPSAnRGVtb0FwcCdcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG48L1RyYW5zYWN0aW9uSW5mbz5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjMyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0NTQsXCJyZXZpc2lvbklkXCI6XCI5MWY3MzM2ZTk2ZjkyOTI5NDg0OWI0YWVjZGJhNjQxYlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODQ1NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTYxMixcInJldmlzaW9uSWRcIjpcImRhOTliZGFjMjM3YWRkOTMyYWM2ZTc1MmI1YjBiYmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzQzOTkzNTYxMn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NzI0Nzg4OSxcInJldmlzaW9uSWRcIjpcImI2ZjZmMzYzOTJhNTNiZjUzNDg0OWY0NDYwY2Q5NWQwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0Nzg4OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MzEwLFwicmV2aXNpb25JZFwiOlwiNjM2M2MyY2U0N2NkZGY2NDI1MzdkMTc0MzQ2MWFjOTBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODMxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ2NjIsXCJyZXZpc2lvbklkXCI6XCJmNTI4NjA2ODQ1MjEyZDJjM2U5OGJjNDc1YjZiMTY4MlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImNvbXBpbGVkQ29udGVudFwiOm51bGwsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ2NjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDI2Njc0MTUsXCJyZXZpc2lvbklkXCI6XCJmNDc2NGE1ZWM1Yjg1MTk0OTk3ZjAyMTZkY2RjNTIxMFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQyNjY3NDE1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDEwMDM0NzgzLFwicmV2aXNpb25JZFwiOlwiMDg4ZjYyZGMwMWEzODMwZTUwMWUxNmM0ZTIzZjhjZWZcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0NzgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc5MDYsXCJyZXZpc2lvbklkXCI6XCI3YTE4NDhlZDZkMGIzMGNiYTRlM2M5NjA2NTZmZTJmMFwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcF9EZXYnXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHF1b3RlLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHF1b3RlLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC50ZXh0KClcXG5kZWYgdG90YWxDdXJyZW5jeSA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKVxcblxcbmRlZiBxdW90ZUlkID0gcXVvdGUuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcXVvdGUuTm90ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHF1b3RlLlF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdQdXJjaGFzZU9yZGVyJ1xcbmRlZiBwdXJjaGFzZU9yZGVySWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1F1b3RlL1xcXCIgKyBxdW90ZUlkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9QdXJjaGFzZU9yZGVyL1xcXCIgKyBwdXJjaGFzZU9yZGVySWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgb3JkZXJMaW5lcyA9ICcnXFxuXFxucXVvdGUuUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+XFxuXFxuICAgIG9yZGVyTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpPcmRlckxpbmU+XFxuICAgIDxjYmM6Tm90ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTm90ZS50ZXh0KCkpfTwvY2JjOk5vdGU+XFxuICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfTwvY2JjOlF1YW50aXR5PlxcbiAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC50ZXh0KCkpfTwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+XFxuICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC50ZXh0KCkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkudGV4dCgpKX08L2NiYzpCYXNlUXVhbnRpdHk+XFxuICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5EZXNjcmlwdGlvbi50ZXh0KCkpfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOkl0ZW0+XFxuICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgPC9jYWM6T3JkZXJMaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuXFxuZGVmIG9yZGVyQ29udGVudCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPE9yZGVyIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpPcmRlci0yXFxcIlxcbiAgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiXFxuICB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMTwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPnVybjp3d3cuY2VuYmlpLmV1OnRyYW5zYWN0aW9uOmJpaWNvcmV0cmRtMDAxOnZlcjEuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCJCSUlcXFwiIHNjaGVtZUlEPVxcXCJQcm9maWxlXFxcIlxcbiAgICA+dXJuOnd3dy5jZW5iaWkuZXU6cHJvZmlsZTpCSUkwMTp2ZXIxLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHB1cmNoYXNlT3JkZXJJZCl9PC9jYmM6SUQ+XFxuICA8Y2JjOklzc3VlRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvY2JjOklzc3VlRGF0ZT5cXG4gICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZT5JbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgd2hvbGUgb3JkZXI8L2NiYzpOb3RlPlxcbiAgPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TRUs8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5cXG4gIDxjYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlByb2plY3QxMjM8L2NiYzpBY2NvdW50aW5nQ29zdENvZGU+XFxuICA8Y2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlF1b3RlSUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlJqZWN0ZWRPcmRlcklEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+TUFGTzwvY2JjOklEPlxcbiAgPC9jYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpDb250cmFjdD5cXG4gICAgPGNiYzpJRD4zNDMyMjwvY2JjOklEPlxcbiAgICA8Y2JjOkNvbnRyYWN0VHlwZT5GcmFtZXdvcmtBZ3JlZW1lbnRJRDEyMzwvY2JjOkNvbnRyYWN0VHlwZT5cXG4gIDwvY2FjOkNvbnRyYWN0PlxcbiAgPGNhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcyMzExMTE1PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcwMDExMTE1PC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MTIzNDU2Nzg5MDEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PlBvQm94MTIzPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5Sw6VkaHVzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT4ybmQgZmxvb3I8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlB1cmNoYXNpbmcgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkpvaG5zc29ucyBCeWdndmFyb3IgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMxMTgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAyMzQ3MjMxMTExPC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlNlbGxlclBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NTQzMjExMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD4zMjE8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkt1bmdzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5zdWl0ZTEyPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjIyPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+U2FsZXMgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMjI4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY3ODMyMTEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAke29yZGVyTGluZXN9XFxuPC9PcmRlcj5cXG5cXG5cXFwiXFxcIlxcXCJcXG5cXG5cXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIG9yZGVyQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwdXJjaGFzZU9yZGVySWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UHVyY2hhc2UgT3JkZXI8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cHVyY2hhc2VPcmRlcklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT4gICAgXFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3OTA2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4NjcsXCJyZXZpc2lvbklkXCI6XCJhZmUwNzhkYzQ3MjEzYzA4YmYxMTJkNjdhZTUyNTM4NFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4Njd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJsb2NrY2hhaW5cIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0MTIsXCJyZXZpc2lvbklkXCI6XCI2MmExZjI0NmMyZmZlZDU0ZmFiOGVkOGJjOGVkMjhjYlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiB0b3BpY3MgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ1RvcGljcycpLnNwbGl0KCcsJylcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ0RhdGEnKVxcblxcbmlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUkZRUmVjZWl2ZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIHA2LnBpcGVsaW5lLnB1dChcXFwidWJsXFxcIiwgdWJsKVxcbiAgICBwNi5jb250cm9sLmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0MTJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MTQ0NjI5MixcInJldmlzaW9uSWRcIjpcIjA3MzAxYjEwZGVhM2U4NzE0NWE4MmFiNWUwNjA2MGEwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQxNDQ2MjkyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ5MDIsXCJyZXZpc2lvbklkXCI6XCIxNTBkMGU3MDhhOGRlNTc1YTc1ZTQzNTE5OGRmMGU3MlwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0OTAyfV0sInBsYXRmb3JtNi5jb3VudGVycyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgUkZRcyB3aXRoIFxcXCJSZWNlaXZlZFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDAwNjAwNTYsXCJyZXZpc2lvbklkXCI6XCI3YTYwYTAyZjViYzFiOWY4ZmVlNWY0YjZjMzJiYjMzZVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2NzQ0MDA2MDA1NixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDAwNjAwNTZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTcyMDA1MSxcInJldmlzaW9uSWRcIjpcImQxMWE1YzM1YzA4ODMzMjQ4OTRlOGRjOWM4MzRjNTNmXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDExNzIwMDUwLFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTE3MjAwNTF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgRmFpbGVkIFJvdXRpbmcgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MjcwMDEyMSxcInJldmlzaW9uSWRcIjpcImI1YjVlYWUyZmNmM2QwNGMzMTJhOGZkNjg5NDBmYTI3XCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3NDQyNzAwMTIwLFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDI3MDAxMjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODI0MDAzNSxcInJldmlzaW9uSWRcIjpcIjBkMjYwM2ZkYTY2Mjc4MzQ3ZWY1Y2ViN2JhMjA3ZjAzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDA4MjQwMDM1LFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlB1cmNoYXNlIE9yZGVyXFxcIiBdW0Z1bmN0aW9uYWxTdGF0dXNDb2RlID0gXFxcIlJlamVjdGVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91c0BhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAwODI0MDAzNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDA4MTgwMDkwLFwicmV2aXNpb25JZFwiOlwiMjc5YmM0YTMyZjZmYThkNDA2YWZkZTRkODU0M2U0ZWZcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjcwMDgxODAwOTAsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDA4MTgwMDkwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTY1LFwicmV2aXNpb25JZFwiOlwiMzFhYmNjZWUwYmE1Zjc0NWY3NjlhMjE5NDNiMmE2YTRcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTY1fV0sInBsYXRmb3JtNi5kYXRhbW9kZWxzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5kYXRhbW9kZWxzIiwibmFtZSI6IlRyYW5zYWN0aW9uSW5mbyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uSW5mb1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbkluZm8gZGF0YW1vZGVsXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTM0LFwicmV2aXNpb25JZFwiOlwiNzMyZWFjNmEwMzViOTdjZDgzNjViY2U4Y2I3YmU3NWRcIixcInNjaGVtYVwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNkOnNjaGVtYSB4bWxuczp4c2Q9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXFxcIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD1cXFwidW5xdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgYmxvY2tEZWZhdWx0PVxcXCJcXFwiXFxuICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PVxcXCJxdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgZmluYWxEZWZhdWx0PVxcXCJcXFwiPlxcbiAgIDx4c2Q6ZWxlbWVudCBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDcmVhdGlvbkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZVN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXRTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU2VuZGVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkZpbmFsUmVjaXBpZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zZmVyUHJvdG9jb2xcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGVsaXZlcmVkVmlhXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRzXFxcIi8+XFxuXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbGFnc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIk9yZ1BhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3Vlc1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXVkaXRUcmFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlJlY29yZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIldvcmtmbG93XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGSW5zdGFuY2VzXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgPHhzZDp1bmlxdWUgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIj5cXG4gICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPVxcXCIuXFxcIi8+XFxuICAgICAgICAgPHhzZDpmaWVsZCB4cGF0aD1cXFwiSWRcXFwiLz5cXG4gICAgICA8L3hzZDp1bmlxdWU+XFxuICAgPC94c2Q6ZWxlbWVudD5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUaHJlYWRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQnVzaW5lc3NEb2NOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VDb250ZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIktleVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJMZXZlbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlBhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkxpc3RPZlZhbHVlc1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsb3dOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkFjdGl2ZUluc3RhbmNlSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJbnN0YW5jZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkluc3RhbmNlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJsYXN0VXNlckVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJmbGlua1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJGTElOS1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJzdGVwXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGU3RlcFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGU3RlcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGVwSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFjdGlvbmVkQnlFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhc3NpZ25lZFRvTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZXNcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIiB0eXBlPVxcXCJXRkFzc2lnbmVlc1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJwYXJhbWV0ZXJcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkZMSU5LXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInZpZXdcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJ0eXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkFzc2lnbmVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiPlxcbiAgICAgICAgIDx4c2Q6YW55IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lc3BhY2U9XFxcIiMjYW55XFxcIiBwcm9jZXNzQ29udGVudHM9XFxcImxheFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbjwveHNkOnNjaGVtYT5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5MzR9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTMxMzY4MyxcInJldmlzaW9uSWRcIjpcImYyYTBlYzk2ZDFjZmZkODdiMWQxMjA0ZmFmZWRlZDcxXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtmbG93VGFza0VuaGFuY2VyXFxcIi8+XFxuICAgIFxcbiAgICA8QXNzaWduZWUgbmFtZT1cXFwiRGVtb0FwcFxcXCIgcGF0aD1cXFwiLyR7SU5TVEFOQ0VfSUR9XFxcIiB0eXBlPVxcXCJVTklUXFxcIiBzY29wZT1cXFwiKj0qXFxcIj5cXG4gICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICA8RU4+U3VwcGxpZXI8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Gb3Vybmlzc2V1cjwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L0Fzc2lnbmVlPlxcbiAgICBcXG5cXHQ8U3RhdHVzTGFiZWxzPlxcblxcdCAgICA8TGFiZWwgbmFtZT1cXFwiUmVjZWl2ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVjZWl2ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZcOndWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJDcmVhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkNyZWF0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5DcsOpw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVwcmVjYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZXByZWNhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+QW5udWzDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJQcm92aWRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5RdW90ZSBwcm92aWRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlF1b3RhdGlvbiBmb3VybmllPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVjbGluZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVjbGluZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Ew6ljbGluw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJzZW5kXFxcIiBzdGF0dXM9XFxcIlByb3ZpZGVkXFxcIiB0eXBlPVxcXCJGT1JNXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uUHJvdmlkZVF1b3RlXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPlByb3ZpZGUgUXVvdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Rm91cm5pciBRdW90YXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuXFxuICAgICAgICAgICAgPEZvcm1HZW5lcmF0b3I+cDZfZGVtby5XRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb248L0Zvcm1HZW5lcmF0b3I+XFxuICAgICAgICAgICBcXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnJmcTwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPnJmcTwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+cmZxPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5saW5lczwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPmxpbmVzPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5saW5lczwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJkZXByZWNhdGVcXFwiIHN0YXR1cz1cXFwiRGVjbGluZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLXRpbWVzLGJ0bjpidG4tZGFuZ2VyLGNvbG9yOmRhbmdlcjwvU3R5bGU+IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkRlY2xpbmU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RMOpY2xpbmVyIHF1b3QuPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuXFx0ICAgICAgICAgICAgPE5hbWU+cmVhc29uPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+UmVhc29uPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5Nb3RpZjwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUQVJFQTwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImV4cGlyZVxcXCIgc3RhdHVzPVxcXCJFWFBJUkVEXFxcIiB0eXBlPVxcXCJFWFBJUkVcXFwiIGRpc3BsYXk9XFxcImZhbHNlXFxcIj5cXG5cXHRcXHRcXHQ8RXhwaXJ5IGVycm9yPVxcXCJmYWxzZVxcXCIvPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgIDwvQWN0aW9ucz5cXG4gICAgXFxuPC9Xb3JrZmxvd1N0ZXA+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDExMzEzNjgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUHVyY2hhc2VPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVB1cmNoYXNlT3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWNjZXB0IG9yIFJlamVjdCB0aGUgT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTEzMDI0MTIsXCJyZXZpc2lvbklkXCI6XCI4NWIzZmI0YjEzNDk1NGMxYzI2YjU4YjNjMTExNzkwZVwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5QdXJjaGFzZU9yZGVyIC0gQWNjZXB0IG9yIHJlamVjdDwvRU4+XFxuICAgICAgICA8RlI+Q29tbWFuZGUgLSBBY2NlcHRlciBvdSByZWZ1c2VyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz50cnVlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke0IyQk9YX0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAxMTMwMjQxMn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTgyMzc0NzYxLFwicmV2aXNpb25JZFwiOlwiYzYxMzI0YmI4ZGFiZTExMjFiZGU2MjczYjBiYzgwNzNcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUU2YTJrNExsNHRkbkFBQUFCRUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56ckVPZ2pBUUJ1Q2RoSGZvQ3h5aFlCQzdpUzZhTUVrYzNKcjJqQmRwYWNwSjR0c0xJMkZ4L2UrL0wzK3JQVDF4WkxoakhHbndTc2dzVDVPTEN6MDY5S3g1RHFFajdsRUppMjRBSFFLTVRrY0dNM2lPMnZDbXZyWnVBUTA5eWZ4SE5SL3FMVnp0RzVhL2hhZzMvbG56VEJTNVBFQmVRVkYxY3E5a3JZcnlrU2FuaVBQVlF2TlZvdFVUZW5HTTVrVVRSbEZtdSsyZTlkWTArUUZRU3dNRUNnQUFDQUFBVHByYVRnQUFBQUFBQUFBQUFBQUFBQWtBQUFCTlJWUkJMVWxPUmk5UVN3TUVDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUFNQUFBQnBieTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQTBBQUFCcGJ5OXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVNBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzREJBb0FBQWdBQUUyYTJrNEFBQUFBQUFBQUFBQUFBQUFWQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQWtBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzREJBb0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUE4QUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzREJCUUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpRdVkyeGhjM09WVWwxUEUwRVVQVk9XcmkyclZGUVVVZU1ETVMyWURrSGtCZEtYUmhKTjFRalk5OW5kMnpKa08xTm5aekg4STE1OU1DUTgrQVA0VWNTN0N3L0dHQU9aek55UE9mZk9PWk43Y1huK0M4QW1YalF3ZzhVbUFqd084U1RFa2tEZEgrcDhaVjFnYmFDdG5HYktqNnliYk1tVUpsYm1pZHlqYndYbGZ0ZTZMNFgxeW10cjhtMHUyOUZHKzU1QXQzMkx1czVRSU9qYmxBVG1COXJRcDJJU2t6dFFjY2FaaFlGTlZEWlVUcGZ4ZFRJbzZRbEU3NDBoMTg5VW5oT0gzWnUvdWJLeHlYUWIrM3BzbEM4Y3Qvd3dzRzRzdjFQODVraXFXTXVEa3ludDBZZ2NtWVIyL3JwTUZmZGhRQzdIeEF5VXAxUisxY1p2dk4zYTduSGo1cjR0WEVLN3VpUzc5QzhDM1NOMXJGanZPNU5rTnRkbS9KSDhvVTFEUEkyd2pHY1JabEdQRU9LNXdPdmJxQkpZL284T2djNk5td25NbWRoOUhwV1o4bmRmdFR0Ly9NTFVXVzhUbThuRU91TDZDWVA2S3N0WS9FeTdNOFJMSHFtQXAwdTBXcVdVMHVNZDRnN2JCbnM5MUhnQnpkVzFueENyWjZqOTRLaUdKcC8xQ251S09UNFhyMUNJY0Erb3ZObnFQc0I4aFcvaGZtVVg4SUJ0Z0lkNGhMc1Zqb2xVRmZnTlVFc0RCQlFBQUFnSUFFMmEyazZ3NEpEeG13RUFBT0FDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UZ3VZMnhoYzNPVlVsRnJFMEVRL2phOTVwcDRtbGkxV3F2U2h6NGtyV1FWUlFvdGVUQllFS0pnVS9QU3A4MWxrbTY1N01TOVBjV2Y1WU1JUHZnRC9GSGkzT21EaUVqTHNqc3pPOTgzTXgvTTl4OWZ2d0Y0aWdjTnJHQ2ppUWkzWTl5SnNhbFFEMmMyMzNta3NEZTBySmVaQ1RQMmkyZDZTZ3ZXZWFxUDZWMUJlVGhpLzZiZ1lJSmxseDhJN2RBNkcvb0t2YzRsZU4yeFFqVGdLU20waHRiUjYySXhJWDlpSnBuOHJBODVOZG5ZZUZ2R3Z6K2pjanlGNUtWejVBZVp5WE9Tc0hmeG5qdVA5MlhjeHNqT25RbUZsNUtESWZ1NS9rQ1RKK2ZhVEt3KytiaWtZNXFSSjVmUzRWL0pxWkU2QXNqMTJ6RGJId1Z2M2Z5Z0x4V2JJeTU4U2tlMm5ITHpYNTE3NSthOUVhRXZYSnB4THJ4WEZNNTRHdU51Z2kzY1M3Q0tlb0lZOXhVZVhrYU93dFovQkNoMEwxeE1ZVzFPb1l5RjF1bWNQdS8rb1g3cE9YREttVTdaazlBWGdocVlMQlB0SzUzdUdOdXlTcEZzbFdxM1N5V2xKemZHbXRpR2VIM1U1QUROM2IzUFVMdGZVUHNrVVExTmVlc1ZsbkZGM28xZktDUzRCbFRlYXBXUDBLcndiVnl2N0RwdWlJMXdFN2R3dGNMSklCVURQd0ZRU3dNRUZBQUFDQWdBVFpyYVRzU0M1K0JDQVFBQUdnSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpsVkZMUzhOQUVKN3RLMjJOVnVzRHhLc0hxK2dLaWhSYWVyQllFS0pnVzN2ZkpOTjJTN3BiTnh2Rm4rVko4T0FQOEVlSmsraEpSSFJnWHQvTWZEdkR2cjIvdkFMQUtXeFZJUTkxQjlZZDJHQlFha3NsYllkQmZxOHhZbERvNmhBWjFEeXA4RHFaKzJpR3dvOElxWHM2RU5GSUdKbm1YMkRCVG1YTXdMMVVDazAzRW5HTWxCNTZVdk5GSk94WW0va1pEM0d1ZVJ6d1B0NGxHTnVlTmplSnRzSktyZUxkWm90QlpTQW5TdGpFRUdQWDAyYkNIOUEvbVhIaFN6NThYR0FmeDJoUUJkaitWZ3dGMFZCRHpHL3R1RG13UnFwSnEwT00xWUZPVElBOW1TNjUvZFBEUnpOeEwrak9DeFZFT3FhNUs3UlRIVHF3NlVJQmlnd08vbkVEZzUxZnRtYlErRE1YSEVPT2ZpY1ZSa3Fia0M5UnhNbW5TSEgvR2RnVEJUbHd5Sll5OEJ6S1pOM1BCcWpBVWpicVpsM0xzSkw1R3F4bTZCclphcWFNMEZUS0gxQkxBd1FVQUFBSUNBQk5tdHBPYW14THF6UUNBQUFhQkFBQUpBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjNDFTNzAvVFVCUTliK3ZXcnBUQktxSWdJcitVYlNBRm5IN1pRaUFJQ2NrQ1FuSEpZdnpRZFk5WjByV21QL1ozeVVqRWFEUjg5bzh5M2xjWEE1R0FyOG05T2UrZWUrNTVyKy9ucjY4L0FGUlF5VUhDb29vaVNqTEdaSlJWNUxFa3dyS0NFWldLeTRMeFhFRkI1QlVGdXNpR2pGVUc1WWpiM09ueE5zTk0zZkdOajY0Vm5maEI5NVhSNWwzZkNHM2phUGZRakt3b0RxdkVmczF0MS9FRWUvZ3c5aVArSnZCN1RsdGdlYUd4VlgrN1l6TE12cnRiS051ejNKaUhEUFBGMG4vUXBXMi96UmxHNmpSN1ArNjJlSEJzdFZ6YWtST2RneE9HU3JGK2F2VXN3N1c4am1GR2dlTjFxcVc3bGZXNmIxdHV3d29jSVRoUWxUeXJ5MFh0SDBWeVhuTThKOXBnR0w5aDRGNnBRZDNSQjRkT2xqT2Rqa2RUQWxKS0YwVkJxWW5MUzVyWHIvVHVlSEczZHBmVERScXRtbjRjMkh6WEVSNXp4enlNVm9TS2hudml0NDlwV01NNncvVHRTaG9tOEVMRE5KNW9HTUdvaG9JSU9rWVo4dGM5TVdSczEvZG8xbGl4ZE1YdlFldVUyeEg1ZVhuMUJyWmRLd3lyTi8yRDY2clZ6VlY2ZkhsNnVkTG1oSEFBVUM0TXNpN3k2S1E0a1dBZ2gvc1lCOE1EUW5PVXhWTDdZSitSdWtUNkV5R0doeFN6U1cyZitCT1lIUEFyU0NXN3FpNlZ2eUJ6Q1Vud1U5ZjRqeWhxZjFpWXd1T2tUbGREVVNpc0lVMGZJSmVYcGk2UVBidWxYY2FNc0k3WmhETUhCZk9KWVNIem5nNGkxdFkzU0UxZFRsOUFPVWN1QWFxVWdLRUVhSmtFREdlL0UwcjM2UVUxcFQ2R3pHYW1qMkh6SE96czczbFZHZ0ljWUpGTXBBWkRGL0EweWM5K0ExQkxBd1FVQUFBSUNBQk5tdHBPZ3dUMmhxTUJBQURqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTFMbU5zWVhOemxWTEJiaE14RUgxT3Q5a21MRFFVV2lnRnhLR0hwRVV4Q0ZwVmFwVURFUkZJQWFscHlRVUp5ZG1kYmwxdDdOVHJCZkZaSEJCU0QvMkFmbFRGN01JQklZUmFXZmJNZU42TTM3TjljWGwyRHVBbEhqY3doNVVtQXR3TGNUL0Vxa0RkSCt0OC9abkE1bEJiT2N1VVA3SnV1aTBUbWxxWngzSkVwd1hsZm1EZGZtRzk4dHFhZkpmTDlyVFJ2aWZRYlYranJqTVdDUG8ySVlIRm9UYjB2cGhPeUIycVNjWTdTME1icTJ5c25DN2ozNXRCU1U4Z2Vtc011WDZtOHB3NDdGNzl6UFhuVzB5M2NhQlRvM3podU9XYm9YV3AvRUtURnlkU1RiUTgvRHFqRVIyUkl4UFQzbC9KUkhFZkJ1UXlKV2FnUENYeWd6WitaN2ZIYlpzSHRuQXhEWFJKZGZWZngzZFAxR2ZGYWwrYk9MTzVOdWs3OHNjMkNmRWd3aG9lUnBoSFBVS0lSd0pQcjZOSllPMC9LZ1E2VjI3R2I1bVNIdzMyQmRydGo2ODZmMXpBekZsdlk1dkoyRHJpNHFuMTFGZFp4c3JuMnAweG52QnZDdmhqaVZhcjFGRjZQRU1zc0cydzEwT05COURjMlB3T3NmRUR0VzhjMWREa3RWNWhQK0VHcnl1L1VJaHdDNmk4K1NvZllMSEN0M0M3c2t1NHd6YkFYU3pqWm9WaklsVUZmZ0pRU3dNRUZBQUFDQWdBVFpyYVRzL0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUUyYTJrN0ZrczQ1b3dFQUFPWUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpNdVkyeGhjM09WVWwxUEUwRVVQVk9XcnEyckZGQVVVZU1ESVMyWWpnSGxCZEtYeGlhYXFxRmczMmQzYjh1UTdVeVpuZFg0Yy93SlBoZ1NIdndCL2lqajNkVUhZNHlCVE9aK3pKeDc1NXliK2Y3ajhodUE1M2pjd0FMV21naHdMOFQ5RU9zQ2RYK3E4ODFuQWp0RGJlVThVMzVpM1d4ZnBqU3pNay9raU00THl2M0F1cVBDZXVXMU5ma0JseDFxbzMxUG9OdStSbDFuTEJEMGJVb0NTME50NkcweGk4bWRxRGpqazVXaFRWUTJWazZYK2UvRG9LUW5FTDB5aGx3L1UzbE9uSGF2L3VibTdoN1RiUnpycVZHK2NOenk5ZEM2cWZ4SThkNlpWTEdXSjUvbU5LSUpPVElKSGY1MW1TcnV3NEJjVG9rWktFK3BmSytOMzMyeGY5RGp4czFqVzdpRUJyb2t1LzR2QXQwejlVR3gzcGNteVd5dXpmUU4rVk9iaG5nUVlRTVBJeXlpSGlIRUk0R24xMUVsc1BFZkhRS2RLemZqOFpqWXZadU1Ca2NjYjdVN2Y4eGc3cXkzaWMxa1loMXg5Y3g2NnFzc1kra0w3YzRZVC9oREJmeTNSS3RWQ2lrajNpRnVzRzl3MUVPTkY5RGMzdmtLc1gyQjJoZk9hbWl5clZmWXo3akpkdTBYQ2hGdUExVzBXTjBIV0tyd0xTeFhmZ1dyN0FQY3dWM2NxbkJNcEtyQVQxQkxBd1FVQUFBSUNBQk5tdHBPMkliNzBJRUJBQUNDQWdBQVNBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGSkdVVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjNlZSVFU4VVFSQjl2YnV3c0s3eW9TS29GeE1QNG9FK1NMeG9URnhrRTVLSmhzVnc4ZFF6VTh6MlpxWnI3ZTVaZjVjbkVnNzhBSDZVc1dZZzhRS0pDWmYzcXJvKyt2WHJxejhYbHdEMjhYS0FMcDcxc2RQSGM0VnV5WVhDWHNLKzBMOG9mVGZUYzgrUk15NTF4cDUwUlhIS2VkQ2V3cHhkSUoxdzhVR2hZM09CSHlPRkZSdENUZm5ucUxDVnpNekM2TXJFcVI3WjRzaEZLc2hMZDdkT1M0WE42M0pwWEtGUG9yZXVXYlQ4MFRvYlAwblBtOTFUaGQ0QjU2U3dsbGhIWCtzcUpmL2RwQ1UxdzV5Wjh0UjQyK1EzaDcwNHRVRmhlekkrbmxCR2RrSDU0WUpjbk55SVZSZ2VPVWYrb0RRaGtIUitTU3pyZVduaUdmdnF2YzZwWWgweVBhR2ZOWVU0Wm45Y2N6VFJ5dkRydTVhSzZNRUoxejZqc1cxRTdOdzJ2ZGM4ZFlnaEh2YnhRbUYwLzJzVjF2L1o5eTJkVVNhTzcvNzNYcnhDUi80ZDZFRjh3NUpFWWo3NkxhOWd0ZVVCSHJTc0d1R0NqeVRUYlE0c3ZUMkgraTFCQjJ1Q3k4MmhHbU5kNHVGMUF6YndwSzAvYlhFTGo0VUhVdXRnRzV0WS9RdFFTd01FRkFBQUNBZ0FUWnJhVHFJeTErZElBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTNMbU5zWVhOemxWRkxUd0l4RUo3S1l3RlJGQitKOGVwQk5GcmpBdzhRRGhKSk5LdUpnTnpMN3JDVUxDMTJ1eHAvbGljVEQvNEFmNVJ4ZHZWa2pORko1dlYxK3ZXYjlPMzk1UlVBam1HOUJCbW9PckRpd0NxRGZGTXFhVnNNTXR1MUFZTnNXL3ZJb09KS2hkZnhkSWltTDRZaElWVlhleUljQ0NPVC9ndk0yckdNR0pRdmxFTFREa1VVSWJWN3J0UjhGZ283MG1aYTV6NU9OWTg4M3NXN0dDUGIwZVltMWxaWXFWVzBkZHBnVU96SlFBa2JHMks4ZExVSitBTU9qeVpjRENYdlA4NndpeU0wcUR4c2ZqdjBCZEhRUU1RREpBSENvczl2cGJLSEovVkdpNGhMUFIwYkR6c3kwYnJ4MC92N0UzRXZhTjF6NVlVNmtpcTRRanZXdmdOclpjaENqc0h1UDFaaHNQbUxlQWExUDNQQkFjelJKeVhHeUVrSjVUeFZuSEtDNUhhZWdUMVJNUWNPeFh3S25rR0JZdmx6QUlvd24xNHRwMU1Mc0pqbUNpeWw2RExGVXVxTTBNUUtIMUJMQXdRVUFBQUlDQUJObXRwT0ZGaXBBUkVjQUFCSmFRQUFMd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOejFWd0pnQnhGdWY0cnU5bmVuVXhDV0VnZ2dBbEh3TTNtMkw2bk95U1I3R1lES3lHQmJCSmNFTENucDJjelpET3p6TXlHUkgzS3FZaUFJQ0lpeWlFSXFNaWhrQkFDSXFpbzRJbWllSXYzOWU1TGVlL3ArLy9xNnA2ZWEzY21HVjU0aE8ycXJ1TS92L3JycjU2ZWVlNnZqMzhPQUhUMnB4aTBNWmt1aXNUVVRxYkY0RmFtMDhXZ2kwbVhoTVNzVHZpS3hHeUpMWTlCbkowY1l5dllTb210a3RnYllqQ2JuU0t4MVRIb3BySS9Cb2V6VTJMUXhRWWt0a1ppZ3pFNGtxMk53UkhzMUU3NGxzUk9pOEV4Tkc0b0J2T3BmR01NanFYeTlCZ2NUK1c2R0N5azhvd1luTVRXZHNJTEVsc2ZnMFZzUTR5ZHljNGlPVGQyd3ZjbE5oeURaV3hUSi95b0UzNHFzYzB4VUduV0ZocHdkaWU4TExFM3hTREJUdW1FWDBoc0pBYkxxZmVjTHV3OWw0YThXV0xueldEbnN3dGk4QWIyRnFvNU0xaVN1WFJKU2N5VFdEb0dhOWxvREFiWjFpNnNaYWgySVEzY05nTm1zREVKbnFmbTdYVEowaVZIbE1hSndVVXpXSjRWSkZhTXdTYTBCSnRnT3lSMk1YSGRHWU96MmE0WWV5dDdHOVhlVG0xL1IxUGVJYkYzeHVCOE50cUZGODdxRXFwZFNwZkw2SEk1WGJKMHlVbnNpaGlNa29uYjJKVTArVjBTZTNjTXR0SGtiU3hEbDB2cGNobGRMcWRMVm1KWHhTRHZUM2tQWGE2bXkzdnBjZzFkcnUxazExSDVQcnBjVDVjYjZQSitpZDNZeVQ0Z3NadGljQWtibGRnSFkzQVpsVGZINEFxeXpUdlloenJaTFJMN2NBeXVZcmRLN0NNeHVKcjZQeHFEYTZpOExRYlhVWGw3REs1bm81M3NEb25kR1lNYmFlakhZbkFUZGQwVmc1dXB2RHNHdDFENWNRWkhibHg3MWhyUEhjdGt2ZFRnRGk5YjNPZ1Z4blBaZ3NjZ1BwVE5ldm1CTWFkUThBb01qanBySWxmME5ucXVsOWxSTlpiSTFPbnE2QjlhdjNyakNJUHVkUmM2TzV5K01TYzcyamRjekdleW95Y3ptRG1BbzRwT3RyakZHWnZBMFRQV2JsNC9jTUdwZzV1UUlQWUdkMmR0M3JCcGtNRWgvSDdONE1DNm9mV0RmTVJzM2pLOHVmK01vV0RRckVnVEgrTTNyTy9mdUdFdDNnOEhrM2dEbjROTmh3ZWMramVQREc1Y3ZXYk54c0ZoYkQ2VTlCb2NHQnphTXJqbWdzRXRnK3MzTVZpd0xwY2Y3YnZZUzJvWDlqbkpURi9LS1RyRlhlTmVvWTlyamtvZHhxbFd6aU5hUXZTd3JXTkZKcHNwcm1Ld3E2ZmFPaEUrNC9sY01lZm14dnJPcHR0b2o1dmZOVjdNOVEza3ZSUXl6emhqaFpOOVN0dWQ0dGErL3N6b1VMYm9qWHI1T3EyTHRqQm9IOGlsMFBTSHJFTVFySi9ZbnZUeW01emttRWNleTduTzJCWW5uNkY3MGRoZTNKcEJPQ3hlbDhuMWpZODV4WFF1djkzc1MzbmJjMzBGdDIramQ5R0VWeWl1emVVSkxrNHhnKzVGaXh6aTVyTEZ2T01XVjZkU2VhK0E4NmR6OFJGVzliVkVOTGdsdFJqTW4xeHRCcDJqVHVITWZNWkZLZWZXVnRjZnN5NnpQVk5rRUZ2amplYzkxeWw2S1Fiek5rNGduZTNlbGt3aGczcXV6bVlEOFVOaTNEZWxPVWlzMEVxdmxYcUxPL3RReXI0QlliTlRTYXZjamt4SytPc3d0N3FEd1VtTkVXRHc5djBWR3FsdXlqdlpBbEpFdTV6aFpKMzZ1S3FQdHU1aUZRMEd4MDNKaHNHT0ZzdmRzTDA3UnIwaUR5UTlQZWYyTDZyRjBzM2xQWVQrZGd5UUE4N1lHQW83TFlPWW1uWnVQd0l1UFpIbGpCa2NYemR5ckJWamNHYlhjR1kwNnhRbjhvamlheHRrdUNLcXpNVDRHRkljOVRCNEUwejdObEdEdG1JeVA1V1p0T2E0VmZpUEZvOVg1TnNBZ3p0YkpwcHhnS0tkMjE4OTBoYzNsdkozTnU2OFUxRGdZR2dWTGh0ejZ2UjgrcUloOUd0bnBsQ1k4RktyTVlhODh3Q3BycWc3WnJ0WDNKcExGZnJ5WWllTllwaHZ0ZU5GcnVTTXdrUVN3NWx3eThaSjVLazJVNE42dDAwa3h4amMwSExTQjY1OGw2ODhkL0NaUFMxWC9IMHRKdGtDaGJQSi9JWTA2b3ZiMGtrOURhcXhxcUdCZFpZaHh4am55aUdHZkEvQktOQS9zY3ZMaDV2NThtWVlsSzlUVEwzODhGcVdQaUxORFQwSFpLeEZQck9KWW1hc2IxMm1RR25aVElxMXFWSm11cWJ4RkdaaHZmeVdqT05SQTg5ZlVlenV3ZExkMlpuaTFuVzVVUWE5NVp0TnNORXNyQjU3Y3ZrR0tiUmhzUEtBaklHNDJVRmN5QkNZL2xhYnBpdVlqUnJNaVhTdnp1ZWRYV0xNM1BKc0VHMHBNc0lWRmZSV05LNHQrZi9jV3Z4V3RNSTNSSDNtY05GeHQ1M2hqSE5oSlhZUEhrWWxkaStEbTFxTHI1WUpmR1Mrb25mdFdPNWkzOURyR2hHWjgrc2JMRzVkbXhrcjhsMElCY3Q3SlAwT2IyZGZRQTA1ZGFUNUNBYmFmcEJsOFA0V1N0TXk2MTFjWDZnMVh0cVpHQ3YyaitYY2JXYzZlUWVGTEU4REd4bGUzNW94UE1ibS9lRU0rcG9raXptRmwwMkp5VThlSEIxYTVvTzVRWlpZR2RMWE5zR2gvdE1HNUhEZWdZYU1TYWlUQmpjZnZOZ3doV1JIWFZUVlg0b1BIemhJSzNJS21aOTY3ZU41Q2cxRWlsTDJvS3pRZEFKUjh6bGJpemJBMnJSSjlvTzd6OVdYaS9hNXN0NFNqZy9pemxKZjN2OGZVYm0rL08xak9RZlBybmNkckFlTlRUMHZ2T2NnUHFOcVN0Q1AvdDgvQVd4S3Zqc095a096cGtUc1NIbmpZN2xkREs2b3VjSmFhYm1HVHNzUHZ3YkVhR0xWODhYOTdzWmtQakNuTm1TOVIxNGJralJyd0t2MzMrbE54WmFHYkxqbk5TTk1zMmE4OW9DODMzcExQdjVha3FkWlk4WWMxL1VLaFlXeUxETzRvS2VKMlZOL3psRGo4ZGkwblRKZEZHUTh1TlAxeGprcGlkMVhFa1FoUVlJYmxXN3Vib2xVL3VlbWphZXA5T1JvVWJuN0puK2tObTJueW1CWmN3eEttbXBSdFhXNjZWeEJXUmIvNExhdGh6NGlpZzNuSnZLdWg2bW9SeDhsMXRCK0dkazd6ajdCUGhsbm4yTDNNMWpVc09IWVVjK2FzaVdic2k0YnFxWmJzbUtZNkFwRk5oSW1Zc09TMHlramFXQy9qSDJHanFYaS96bXlrcFExeFZaTVRWTVN0bXpRdkpTbUlDMmNyNmswVzdQcG10YlNYcU04Tk95Z1BzdnkrelREbEQxWmNYRzJsblJOMTBpNmlxTFFDSnlSS0d2VnNWWFRiYjgxcGVpS2Eyc1diMFcyZm1zNm9kbTJpNUx6VmlVdFdoM1pWUXhGODF2VkJITDJKVENOSlBYTGxxZWpEbW5lTDFzcGY1WmllSnFIeXZOV1JiZjhWczFOcC9XVTRmSldWVXY0clpabEpmU2txdnF0bG1va2pHUkpjNkthMUgwTGF5YjlyOHFXb2dnck9WcTVsY2dpZ1ErczBBY2t1WjRraWJtVjBRdVdiaW1HU3JSazhvbGZJbTNranhiMGFidWVrVWg3TkFlMU15UGpjWXlzb1p3cVVjRjJwZFJuS3dieU5SUmIwTFR4enRJNFpmUUoxZ0xKRlprOGhETmxtby9VNUpBRzhVNXJKSzBoKy85cy9rZGppYTVDMGdncUdyY3N6dGFJcXltMFFDb2E1NEVHOGkxUUxpRlJ0dldBdWlFSFZyRlJMNXQ0azlVVk0xM0g2dWpjQnExdUdGcVoxYzBhVnVkelE2c3JsbDNINm5wTkhqWGFJbk8wcWhWcFZyZlU5S3k1LzU1Tlc1TjRWdkhraGp5cnFzWitlOVlzZWJhdWQxWFRpM3JYTEhsWHhSVmFHWGtxYkd3cG1vSGpUV1RQY1lFNE5HeWtqeTJjRzkxVHFFTFpoUGU1NWRERGlrSFdKU3RhK09mamluU3ZMWlVWa2NxMm9sTFZrRWtWTXFsVk1pbGNBcFczS0NWclc3ekdkZWQ5cHM3dHl2OEw4YWltOUNoZkd1bjdnV3JCR004c0d5TVQ1OEFuUG00dERTT0xUalBLdUdqWWtPQTBNSTVHYWRnK3ZqZ21aTi9LNUQ5ZERwREVmV29MRFdqbndIN05WbjM5b2lzQS82R3NscTV4NnJaS01wRmQwQXQ0WnhzRzdTaVduWXJHQSs2MXlUQ2lHZW1wdlZHQkR5V3d1eGxLUFluZEVhbFQybDF6MUFPM3U2c2ZSTHM3S2JlRzNYVTVoVmRYdDhwWHo2UXJKNWpqQlRUVU5OMGJlcFJHWmV4RGVWU01JUFhwVnZzVmRlSXhOTlRXdHhMVmtJZUNOWjJva3BkdDFKNXFOTmRmaVg0T2tVaE5nUjNkNTBBU2xUZ0UvSFNpaTVLclBQNGlITW5QS2xtSDloUkR0MHpVaFVjQ3NjL0tNcysyVUNVZUhVZzZXU2Yva2c5UlFrSTQrdGN5Nkk2R29XOW9aOWNObFNJcGVnM25FQ2YwcGlxaXM2RXFQSGVoaUUxKzFOTW16NHNvQThLeGhrNkl3VkwxVndENVhzd3lmU3piZkNYSXNvOFhxcW0wRnlSUlI1Nlo4RjZ4WHZ6ZGtqQkxOR1RFcTZYNm51TDdCYWNXN0NqVjFrUjl6RnIyRkxiMHVYTTcycnFOSzVhUVNYVFNhWnlwY1lzcElUWWJ3WU0yT1I3UWQveVBhUGplVUpJQ0dZYmxUSUdNU2swNHIrQU90VkhJTWx3amhlK2RBVHBVN3I4QUhWcGRkTkNLMENMb01EZzZETm1mYjBUUWdXc0dkeVJmQTZVQ0haZ1VsNkhEcEF4N1NuVFFyQU5GaDRuaHRGbDBXTFZzU3JFZ1FJaXRxQ0pINGRZa2YvSzZuYkJ0bTF1QjBNTDNYcUVsSDZHTGxXOUcrUVk1RjBVOThuMGs3dFhDbHRaWXJLRVl6U05NZ0NUVG1XcC93dTIybHQ2bFZXRUkrUVZTekZSRi9oRkVWSmRiaHZCUUM2OWtGZTV6UHl1UktjSllDZUpvR1R3akp1UWsrRnpxOVROUFN4YlIzcWVHOUN6S2tNa2pWdEpLa055MFIxbE9hVS9STkxJdHRmampiTlBuaWRtalNVajF2WWljeUpLNmJlUHh6L0lqQTNwUnRoTktBdVZCdFBQWVNWSFE0RWczYkkya3BOM0hKcnNtVEI3Ui9XanBZNStqRUhjYVUvZnoyaUNmNHJ1TkZrUmxuczJMZkoxeTVYQ2ZKMXZ3ZkY5Vy9YT3k0V2RtcXA4L2N4cGk3WEpkVmNVTjF5MHZoY1d0RU0rMEVQd1ROMXBFWUZVcDRiYldPZDNmQjZ0UDczNjd3SmFnS2RkWVJWVllxaE5oL1ROTjJTbVRRZ2JYSDQvay9GN3pjNW9HOThUeVZlcnppZHE3SkRsZkJXcWdQWG1OdEtuTUN5THJJK0ZuQmo3ZS9MeUxzaDN1VVlOanJFWkdRU3ZXVmhKcDNkQmtMMkVpSGhLeW9xWVVCVVZFeERuSlJNTEFrNitoNlRoR1NiaHBUSjd4UktTcExxSTRwYWZjbEs0bDdZUnNSL0lSazRkbnpQWDhtbzZZbEtlSUcvcCt4ZzNMVFU0Wk4ycnVRWFhqaHBYVzl5TnVKR3JHRFl2SERkekRncnFQUnB5WGlNUUhNNHdQZGxWOHNNUDRZQWpPR3E1N2xXSUFjakZGZExBd09sQlVvQXplNUZFaWdkbVFJVTZoS0VsVlhDQ1B0VFl1MlBRa2FhcTRZSW4xVEpuRmxIRkJDN0kvb29jMjhlT0R4dlVKNG9OV0p6N29Zb1ZYeDRkSXRLbnlvazFlck1aaEtaTWx2OUxlYXB0VjFxQ2NVd2trdFFSaVpVWGM2Mmg1UDROUXJSU3RVNjRGM1pGRkhEOHErT2NzLzBtWGhjNUVMVlMrZnVqWmoycFp2QVZYTnoxd01aS09ZdG1hUmtFMjZhVTkzRUJNTGVFWWpxYnJIbG9PTnltVGduOWFkZ3hQOTF4Yk14TzJtbkF0Vy9HOFpEcUJlSEx4ejhPL2xQK0hmRlE2R1FXSUlOVGFISDJVYzlOZjJWTVR4OVltZVdyaUpKSU5QVFZ4WEhtL241b1k5WitaaExISHFEcXRJVzQ0WG1TN1JwYWorYzgvbmJUWmREYWlUQnBWa3NwVStZMGVZSy91S1FyeFJKR0ZJMHNUTVlNQ2hJdXJYVU9NQlhIZXNPZ29qenhOc2NhNUg0M3E5VjF2ejVvYy9iWDJMTTVUSUo3TG92Q3NuVkRyci9sRWdIQ2J4eU9LQ3BRNThWVVJSQ0RWejdFU2FWZFBvSmVTbm1VbVpCTnovSlRyeXFacXBwTzY1V0dRU1JwYTBrMjU2UlFldU0xa1NqYlRLVDJKdTVMdFdDbGttVXpoS3JGTGZ4elZZdmNveDdhL1k5VkV0eXVyazZBNzZUa05vZHRWMDYxLzJ1c29BdHRhUlRZdTg3T0dYMWNqZGIzRzV4ellZNHZUU3hBL0xUNGllczRTVDEvcGRLTFhPdCtVbnJud1V4ZnBqMmVxOEJUbE92eUpLT250NDRTZXNDQUhucmxTZjBvTkpQQ2xJL3dTanBXZ04rRS9KZUJqZ24yR3QrTmVTRHV4VVRxUFJVNVlPQ2FaRUJpbjhaNS9JcWE2cC9ydGR2RGtCdmNnbWt2UG9wQnZ3Q0Y0V3E3NHV3VDN1ZXRaaHBuMkhOVTBURFhoNEQ4VnozOG9ucTJuOWJRbXF3azVvYVJTRGg0OGROdlJ2WFRLVXpCbFNCcWVuVXBqQXAvRVNaaG9tV21GTXRTMGl2SFlSQkptMHRRVG1wazJYVlBUTlRJeHVralcxRGc4eUQ1Tmx3Zm84aUJkSG1KdzdGUWZWakk0cHQ0UWVndWR3YUo2M2FWdkd2WHZLbm9GeFNTV0QwdnNNM0gyV2ZZSWc2UExKeEsxamJqdjVMMHNmWWR3U2VOdlhpa2FVWDYwdVRsNmM4TU5Zckdid2ZGVGY5TGNIR0Z1bFQxMGVheTVpWW5taGx2TkRiZWJHcTdLelExWG1odXVOb1N5elpsc0VWY2ptWEt2eEI2UHMzM3NpVGg3a24ydXpHdmxzemNYMDViL1loWk5lNm81c1RRR2g5ZDZIeUhPUHMrZWJvNVVjMmhVRFFheks5OHNpOE9uNEg3NmpQc1pCb2ZWZUtkVll2ZkUyUmZZRjBuUkw4WFpzK3pMRXJzM3pyN0N2aHBuejdIbkdmUTArcGsrZy80RGYxbWR4RmdhWjE5alg0K3piN0JGY2ZaTjh0YTMyTGZqN0FYMmZCeWVBN3k4Q0UvRTRRZHdaNXg5aDMwM0RudmdNWW05R0dmZmcxZWFzNWNwc2UvSDJVdnNCd3lVcGw5dWpiTWZzaCtSdUQrVzJFL2k3S2ZzWjNIMmMvWnlIUDRDcjhUaDAzQS9neld0ZU5rNXpuNUJKdmdscWd2ZlJlM1pyK0Q1NXRSTXhKbEVNajFBTWpYbm96by9ROUFNZHl2T1poSDNCK0VodWhEUTRHbTZmSmtCeE5tdjJXL284bHU2L0k0dXYyZnd1a2xmU21Fd0k0SWVCb3ViaUY5TmpWYWJHczEzbXo4d21Gbm15cVpJNkVUaWowMU5NWm9hYlRZMU90SFVhTXYzUzRDWXB1WTJ0NjBvelcwclNuUGJpb0p1bjFNejVqR1lWZjZDRm9QdVVzTlFrVGFjWEQ0SXM4aHhhRVA0MGhhQzJ0dkpxWEFNaDYrWWw0TG5ycDZEOXk3V2ZHK241MDc0ZWNvWkUyUEZ6UGlZeDhkczlJb1RlUlJlcnkvY1pLK3Z2YmZXbTg0SDdUYzFybngxcFduNHR3dXVhNTBjcmZuNWg2dGVkWUVhdHMxMCtnbURMVUVlVTBwVkNndzY2RWRDYU5HZDJITnVSTG9OeVFzOXQrWjNpNWMxOHlJa01UWHEycUZFdHZLZTVwM1o0dmRBa2VUeFBSRkdiaTdyVHVUeEJGVHNveFhLdjl4SWcrYjExUGZwbk5MMGdkelltT2VLMzAzcDhyYVBGM2VKNk5WVHcyckhpRmhRT3JsRUhNcmd0SVlpUVVNdkFzK3BZVzZ1ZTVVRXc5aFZFWkZHR3BBalFwNy9aRktqZ21WYkY0b2IreFo4ZXlIelZvKy90enFFTnoxRFpJWE9UTGloekMzelU3RFI0RHhwcTFOWWovc0tuM29PVHMzeW04T0Q4ZEVGNHY5bUN0OXE1RWwrR3FET2U3ZHRZelR4TUtTd1BwY2R5cWJRUmFuZzYvVnQyRXJlSEtySmxYNmZSUHlRVkp1VFNsVzRQVmk5S1B5UjllSUw3cnNlMzZsSzMwYWJVL043V2NoaHV6Tk9QMzFRL3IydDROZGV5aUJhN3p2RDNTanZRT1V2STVWYk5QeWxyTUtyL1AyejJ1dmpxSEp3Y2tnT1p0MGMvOG1oRG8vWEdHaFRnYmltUnJQUVJmNXEyNVFiejdoNGhxbTFTQnYrS21ENHhmVFphTlVLMkhRV0pzYkh4eklrdE1TL1FVcy80ekxiLytKUjlMSEozcDZxZGZ6cTd0R05iSVlOUnBJbjlsUDJBOWxHV3lqK1V5MDBmUk01U1FzMWVLYTFEamc0U3B6WVFGN0NmelN1NTV4RlcrQTRhSU5iQWMvV2NCVGNBWGNDZzQvaDNUUm9oM2x3VitRK2h2ZDNSKzZQeHZ1UFIrNTc4UDZleVAxU3ZMODNjaS9qL1gyUmV3WHZQeEc1Ti9IK2s1RjdHKzgvQmZkamZSNDlIdUhsQTd3OEFXVjdFQjVDdVIvR3V5eEkwSUhsck43dTlzVkxsczVybnpkOUQweC9tTlA0REY1aldBS2NEak5oSFh3V2E2djgwZkFJUEFyQWE3czVWNnJ0Z2NmNDZGbXdGeDVIK2xUYkIwOGdQNm85aWJYcDhEays2eW44NjhCWm44ZVNwSGthNjhRemlhM1R5WnFCTkh1Z28xS1dEVEFEenVTeTZQN1lVSlo0S0VzOGxDVWV5aEtIWitBTHlJMzRmWEV5N2FWS2pwdFErODFOYVA4bGVMWXA3YjljWC92T1NsbmVoTnFQTktGOUlFdWdQWU92d0ZleGoramVqalNwYi9NKzZCcnBqclUvQ1RORzJ2WkJmR1R4SHBnNS9Cak02bmdTRHFHVzJTTzllK0RRNFpIMmZkQk4xY09HUjZidmc4T3BPb2ZHN1lHNVoreURJMGIyd1pFanZVdjJ3THc5Y05SRG9lRGQzQVJ2aGpsd0hxeUU4MkVOWE1BVk9OWm5IaXF3bVo0M29vQnI0RkQ0R253ZFozK0QwL2dtdG4wckZQcFJJZlEyTHZUUjFVSjNDcUdQSWZGZXg0V2VUOVVGWE9oanFYcmM4RWpIUGppZXFpY01qMGo3WUNGVlR5eFg1U1N1eXV0cnFMSWRWY25DTU9UZ0hCaVBxTEl0VkdXYlVPV2NDbFcralcwdndIZUVLcmRDRi9maFNxNUtUMGU1S2lSNGZHUUpyNkxnaTBhVzdvRmVFdkV4d1A2NXk5dDc1N1h2aGlXVndsMENpK0V5V0FaWFlraDRWd1FvSzBQaFZncmhxUFpkckUzanRSY1JvRzA0UitJQ3R3dUJ2NGZqdmc4dkNZRWZSb0ZwQVF4eGdaZEtqUWhNbGw0MlFsanVpd2cvdlhmZTlCckNYdzBKdUFhV3cvWFFEemRFVnR4UUtQeFFLUHhRS1B5UUVKNXFQOEExMEk2emZUV21DelYraUROK0JEK3VhWGU1aHQwWGtScTlYSTFscEViZjFIYS9DZTErTTlyOXcyakRXNmUwT3duczI1MEVycmI3VDNEY1QrRm5RdUJ0WXZFdjVnSXJiU2d3eXRNdWdLNFNlRFVCM25XOWk3djEzV0JVaWtkci9RNDRCcG1kZ0RzRWlUZlhKeW5FT3dFNnVRQk1DUEJ6ckwxY1J3Q3pRb0FFQ1dCTkljQTlTT0plRk9BK1pQV0pCZ1g0UlIwQjdBb0JscE1BSjBjRVdGRkRnRThqaVFkUWdBZVIxVU1OQ1BCTHJQMEtmdTBMd0M1QUowbllmbC92WjJEbDR0MndDcVBFRzBhVzdJVlRHRWJiMWV1eDFvOW5vZlo1N1h0aGdNRXRjQW5WMWxDUUgxeU9NRm83c2dkT1hkNHhyNE53Zjlxak1PVFgzdGkyRjA2ZmhvTm03SVYxTlBnTS9QOVJXQzk2Mnl0NjlVZGhnK2lhWHRHMTRsRTRjK204anQxdzF0bjMvdTN0U3gvaWV3dHB2d3gzREVBZHUxRExJM0NQTUZEZVZiZy9uSVk3WXhyM3hrdHhsL29Jd3ZFdTNLUHV3UjBxV0hXcndJUGZ3Ryt4Wm1DMCt4MzhnY1A1dmhETzk4RWY0VTlvb3k3RTF0L0RQNkNkanNBMSs0L3dUMmlwZnhiVzlmditKZXo3Vit6N04rdzdGS2I5RlJaSThPOFMvSWNFLy9rS1JpcmY2SDlHZ24rQlY0VFgzNGdxa0l2bTlqNENHeGZ2aGVGcEtPc21jdmJtM2JDbDVPQU92cXFlaVRoMWJpam1YUGd2K08vUXFmL0Q2ZjlWME0raFNnU05CZnZnN0pIRlMzcDN3NXYyd01qNnBlaml4K0NjM1hEdTJiMUxkOE9iUzR4bThTanpiU3hmd0h6cU81eGhyMDhpWkxnQS9vYlNrRUFMR0dNMGN4YnFTMEswK1VLd2FjQllXNGlzT3dTeVhrWmtuZGNJc3ZhV0krdDhSTllGRVdTOXhhODVsY2hDZ0NRbkJaMWJCM1IrYjZvTzdoQ1NudWpxcU9hWURpRTVFSUdraVFrVjRMN1NoVHZMRVJnQkRRelFxekJBbjRZaDJzWFlkeW5HdnR0eDdUK09VZUJGREVNLzVwSGdseEZvM2dhL1llMGNtdmVHMEh3NWRNSExJVFJmQ3FINVhCVTBYd3FoaVgxc2VqMW9QaVc4aGlDalQvWW1nK1lvUVhOckRXaitkbXBvc2s1T2YycG9uaGVCWnFZU21uL0c4aThJelZmMkU1cGRLRVFzaE9hbEFwclBJalF2YkFTYXQ1VkRjeHRDY3l3Q3plMzFvWm1kRkpxNVNhRTVYaCthRjRYNE96K0NQeFhUWVVCVGQ4SGY0QWkwZzRIR1dJWEw4alJjbGk3aTZsSkV3KzNvOE1mUklVK2pZNzZJZGlsaDczTEUzZ3lPdld0QzdEMGIydmpaRUh0UGh0aDdzQXA3VDRiWXd6NFdyNGU5dTRWYlpxSmJaazJPdlR4aHIxQ05QWnc3TmZZTzRmU254dDZGRWV3Vks3REhYZ2V6Mkh5WXh4YnNKL1ptUXhjN2xIV0xvOWxiRUhsazJWbjdvRzJrVnh5SEppcVZXeGpKdFB6REdFQndHUE9QWlhUODg0OWwrMFNTNkIvRzJtc2N4b2ovWVpQeDMxSEpmOUdVL09rQTFnei93OFZoY0JPMmtnWGpBZjg5Y0hFbDk2VVJTOGREN3ZHUWV6elUzai8rdFhFT2MrcHoyRm5KUVptU1E2QmZpY05jZG9RQTB1bEloVFNlMmQyRzlMdmJ1M2M5Qm0rdFpHRkVUbEF6T1dIZ05SS2Q4Um9SRmljb2RpUm5NRzhTQm0rclpHRFhZVUNTVnpNNGlqTTRHalVtQmxzUUJmd0F6eGtzOVRtOHZaTERxb2lWWm9VY1pvVXErTDZmRnZxK1RmamU1M2hNQlFibTRrcWFoUHZmVlhJZnFNTTkwRzl5N3ZPajNHZDNzZ1hzV0dIYzVWalNySTVlRFAzVEtyZTAza2hZNldESGlWWGV3WTZuRkpxZEFCUnJHVnVJRkU5c09jV1QyT3NGaGdkUkcvS3JoUGJaRGF3MlNkLzFVa2hTUXBMMzgzNko5ZUFTbm9Za2UxdFBjbkdMU1VJblc0SkwzaWY1Szl4RTZMOUg5c0U3UnJyZkdUeXB1UVIzM0V2NUVmWXlyRjNPVDdCWFlPMUsvM0QwcnMvU29SY252RHQ0U25MVkNJYTE5L0FaVitPNDkvSVoxMkR0V241eXZ3NXI3K09QU0s3SDJnMGhsZk00bGZkTGdzcU5ST1VEbk1wTk9PNkRuTXJOV1BzUXAzSUwxajRjenIyUTVHZGMvL2s4dlZnSlBiaXRLckFhenhuOWNER2E2NU93Rm0weWlQQmN4a0hhQngvRktkUFFSdHZRU2g5QjNjL0g4allzMTJKNU81WjU4UDhiRmVVbVVTNFhaVUtVcWloUEV1VkNVUjR2eW1ORk9WK1V4NGp5U0ZFZUxzcHVVYzRXNVMzODJnazNpL0ltVWQ0b3l1dEZlWjBvcnhIbDFhSzhTcFJYaVBJeVVWNGl5a0c0Rlg0UFhmOExVRXNEQkJRQUFBZ0lBRTJhMms3S01QTytCZ1FBQU1BSkFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNall1WTJ4aGMzT3RWdnR6RTFVVS9tNmFkRW02UUtFdFVrVHdVU0ZOSDdjQzFrZHJ0WStOUnJmQlBpd2lJbTUyTCtsMnRudmo3azBwLzQ4ei9vcU9CWkVaaG5IR0YvNVBqdWR1WWlOdEdKcVJKSHNmNTl6N25mT2RlKzdaUFA3NzU0Y0FMc0hMb2grVE9RemdyU3hOMzg1Ujg0NkJkM1BJYUVrR1V6bWN4M1FQM3NPTWdmZDdrTU1IQm1hMVpzN0F2TzRYREZpNkx4cjRNRWRvSHhrb0dmall3Q2NNM1dyZGo0Y21HRVpzWC9KYTRLaWJNdHFjNUo3WWxEeDIrYkw0cGk1aVZaVFJVbDBxUi9reWpLZG8yN1FmK21xR1lUemZ3YjdoTlliMHZQUUV3MUhiRDBXNXZsa1IwYXBUQ1VoeTNKYXVFNnc1a2EvblRXRmF1OGRnbHNKUVJQT0JFOGVDcHVNSHR6bDBZWkxjelRpMVduQ2I0ZVJ5Y1dsWnVNTGZFcDYxSlVLMUxPSWFyU0pMS20vTHFNcHZpY3JGRFY2THBKS3VETGdySThFM2hWcVhYc3lqNW1KdXkrclVjQWMrUE0wcWVkWVZ5S29tMUpGdGhoNmhjZGFjZ0l3WldLVG9XUzNCRlYrdDJ4cTI4QjlZdGMzblphZ2l4MVZEKzljUzVHRjF1eWE4VmtBV25nL0JjM2w3dzlseWVPQ0VWWDY1c2lGY1JiSGJKMkxJV2R1dXFDVjRCc29NMlJXL0dqcXFIcEV2MyszZm9MMkxCTEVobzl2OFpqMTBrNjI4MkJ4TmR4YlM1MEYyUnJOWWtmWElGVVZmWis5Z3UvM2ptZ3BkQUN0MEF4bjdZWFV4OGNmQVpST2ZZc25FQ3pocFloRExKbGF3YXVJejBLMlorLy91bVJqQzZ5YXU0SE1EVjAxOGdXc01wMXN4Y2lvKzl4d0NvU3lJK1NxMUpyN0VkWWJVdFRrVFgyR1dvVDg1aEUxSHJmTTV2MW9LbGFpS3lNUU5mTTNRMnpxZ0ZSVVJLeE1PS2d5am5aeUNpVmZ3R3UzcDVIWS9ZYnFSR3d4bm41RWNCbHlHL0VFdkIwTmZ5OFJ1bGpJTUg5aFBxanpSbm1NcEJ2SldvOGJaQjZrOENTYTMxRHBsbGhKUm8veTBLUDZMcGl0S1hwZlpZem9OckhtcnRHWXQzTERXclBJcVJjVisybkVuSHVuc2RWeFh4QlRXQ1hvamZOdEphWDhHZEtlMXRZTzYxVmNWcWl6RFV1aUpiZUUxdEZRUDg4MGlVMWQrd0cwLzF2U09QQ21oV05GZWhvRjhxVzFGT2tUYUJJOVNQOTkyUmNyM2FKa2Z4M1hoelJMU0NidmRGZEdIVXE4RStoVzM5NWFRYXFBdFY3eE1MK29CRUNSWWI2K3VDZlJ2b0l1ZVFad2k2WXMwbWtHS3ZrQ3VNTElEVnJpSDFQYzBTK0UwdGQyMEJ2Z0ZMMUY3b3JFS1p3Z1R5VWlqTWZyU2JXdGkvVW5ZYWVyOXdvOWdQNkJyNUNla0Z4OGdjL1VldXN0amhHK01qZDdGb2E3N3lLYndDTG43NkdIVW0vVGJ3ZUZFbDk2ak83S0RvNGtpczBmUnU0TmpZM2QyWFQwRGc5cGZZZUkzb3Z3N0Vmd0RiNUpEWlR4R0ZYOGxGQW9ONTNZcCtMcVdrZXNtcnVNY2hnbXBuK3BrQVNQbzZwMGxXcU1rMGJRdU5rT1VMWXc4d3ZHNzZMdlROa0ptTXM0MjRjZm9TWk5rbkZxZXJKL0FHMGwvZ1FDMTdoSTVlSlpHcHlocS9XaDhNaVI5bFRET3cwWWUyWDhBVUVzREJCUUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rVVhWdmRHVlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT3RVc3R1RXpFVVBVNmFUaG9DTFFVS0xRK3BFZ3ZLb2w2QTJJQXEwVUtrU0NNZUtlcUdsV2ZtZHVMSVkwOXNUL2d1VmtoZDlBUDRLRlI3T2hJYmtGaXd1ZWNlMy9lOS92bnI0aExBU3p3Wm9ZL2RCQThUUEdMb0sxTXlIS2JHbHZ3YlpTOFd2TGJHbTl3b25odEx2Q0kvTjRYamxseHR0Q09lbXZJMXc5QTFkYTBrV1lidGRDRldnaXVoUzM3cXJkVFJQckRueTJuQjBQdDZ6SkFzRytNcDBxRjBycUhpcldmWXVRNnJoSi96WTFsT3RhZVNiQWp0TjVsaVdIOGp0ZlJIZ1Q0N09HTllPekVGTVd5bVV0T0hwc3JJZmhHWm9samQ1RUtkQ1Nzajd4N1gvRnc2aHIzUHNlNk1jcElyS3Q2dlNQdFpOd2JEZUtvMTJSTWxuS1BnTzBtbDRiVVMvdHpZNmhVdnFETGM1WHhHeTRhY254Z2Jjd2t2US9EVHY2Y043WTlPVFdOem1zall5TzZmNGcvajRHUGN3bWFDeHd6di9rZGhocTNmVi9pWUxTZ1BLejc0NTh6WVJ5LzhDbUFkWVhzWUJDMmNBRW1MUTJ5ME9PcndCc1l0M3V6c0xJNFM1Rlpndk9YQTRQa1BzTzlCNmVGMmx4YnNFN2FEUHI1MndCM3N0UGI3clh5QWV3Rkh3ZGJESHU1aTR3cFFTd01FRkFBQUNBZ0FUWnJhVG5JdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUJObXRwTzV3TGUyRVlCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFV1WTJ4aGMzT1ZVVXRQQWpFUW52SUdVUlFmaWZIcVFUUmFqY29Gd2dFaWlXWTFFUWozc2p0Q3lkSmkyOVh3c3p5WmVQQUgrS09NczZzblk0eE9NcSt2MDYvZnBHL3ZMNjhBY0FaYkpVaEROUS9yZWRoZ2tHdEtKVjJMUVhxdk5tU1E2ZWdBR1ZROHFmQW1tbzNRRE1Rb0pLVHFhVitFUTJGazNIK0JHVGVSbGtINVVpazBuVkJZaTlRZWVsTHplU2pjblRhek9nOXdwcm4xZVEvdkk3U3VxODF0cEoxd1VpdTdlOTVnVU96THNSSXVNc1I0NVdrejVvODRPcDF5TVpKOHNKaGpEKy9Rb1BLeCtlMHdFRVJEQTVhUGtRUUlod0Z2THh6YWszcWpSY1Nsdm82TWoxMFphOTMrNmYyanFYZ1F0TzZGOGtOdHBScGZvNXZvSUErYlpjaEFsc0hCUDFaaHNQT0xlQWExUDNQQk1hVG9rMkpqNUtTRWNvNHFUamxHc3Z2UHdKNm9TRUdlWWk0QjIxQ2dXUDRjZ0NJc0pWZkx5ZFF5ckNTNUFxc0p1a2F4bERnak5MYkNCMUJMQXdRVUFBQUlDQUJObXRwTzRqYzdQa2NCQUFBakFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpsVkZMUzBKQkZEN2o2NnBabGowZzJyYklDQ2NwM0NndWtvVENnbFRjai9jZWRlUTZZek56QzM5V3E2QkZQNkFmRloxN2F4VVJkZUM4dm5QbTR6dk0yL3ZMS3dDY3cxNFIwbER4WU51REhRYTVsbFRTdFJta2o2b2pCcG1PRHBCQnVTY1Yza2FMTVpxaEdJZUVWSHJhRitGSUdCbjNYMkRHemFSbFVMcFNDazBuRk5ZaXRiV2UxSHdaQ2pmUlp0SGdBUzQwdHo3djQzMkUxblcxdVl1MEUwNXFaUS9yOVNhRHdrQk9sWENSSWNycm5qWlQvb2pqc3prWFk4bUhxeVgyY1lJR2xZK3RiOE5BRUE4dFdENUZVaUFjQnZ4aTVkRFdHODAyRVJjSE9qSStkbVVzZHY4bkFiVzVlQkIwNzZYeVEyMmxtdDZnbStuQWc5MFNaQ0RMNE9RL3R6QTQrRVU5ZytxZnllQVVVdlJOc1RGeWtrSTVSeFduSENQWjQyZGdUMVNrd0tPWVM4QXU1Q21XUGhlZ0FHdkowMUt5dFE0YlNTN0Rab0p1VVN3bXpnaU5MZjhCVUVzREJCUUFBQWdJQUUyYTJrNHZqTHpnVVFFQUFCb0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNReExtTnNZWE56alZITFRrSXhFRDFGQkVFVW4yaml6aGlqTHFqdmhSbzJSQk1OdWhCMTRhN2NPMXhLTGkzcExUNCt5NVdKQ3ovQWp6SU9WemU2VUp0TXp6eE96OHlrYis4dnJ3QjJzVmpFQ09ieW1NK2pJcEE3MGtiN21rQjI3WGI5aHFGdVF4SW9ON1NoaTBHdlJlNUt0V0xPekRSc29PSWI1ZlF3L2twbWZVY25BcVZUWThqVlk1VWt4T0ZxUTF2Wmo1VnZXOWZibHlIMXJFd0MyZFM5Zmt4TmI1MkthR1hyVUNEenNDa2diZ1VLVFIwWjVRZU9OYzhhMWtYeW5sbzdYYWxhV2w0OTl1bVMydVRJQkhUMG94Z3FyendURWhrUmo2QThoZkphRzcrOXQzOVk0dzdGcGgyNGdFNTB1c0szQ2FwZGRhZDQwMk1UeERiUkpqb24zN0ZoSGdzbFpERXFzUEtmTFFTV2ZobFhZUGx2RVd3aXcxOHlQSUtOZXpQbTJEdmdmSVl4dDdIMERQSEVYZ2I1WVp6eXFoamp1L0xKUUFIanFVSU9KVXh3UFl2SmxGL0dWSXJUbUVtMVova3VwaWJTbDhEWUIxQkxBd1FVQUFBSUNBQk5tdHBPb1djZnMwWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWlZWUxoSU5FRXMxcUloRHVaWGVBa3FYRnRxdmhaM2t5OGVBUDhFY1paMWRQeGhpZFpGNWZwMSsvU2QvZVgxNEI0QngyU3BDR2FoNDI4N0RGSU5lU1NybzJnL1JCYmNnZzA5RUJNcWg0VXVGdE5CK2hHWWhSU0VqVjA3NEloOExJdVA4Q00yNHFMWVB5bFZKb09xR3dGcWs5OXFUbWkxQzRzVGJ6Qmc5d3JybjFlUS92STdTdXE4MWRwSjF3VWl1N1gyOHlLUGJsUkFrWEdXSzg5clNaOEVjY25jMjRHRWsrV0M2d2gyTTBxSHhzZlRzTUJOSFFnT1VUSkFIQ1ljQXZsZzV0dmRGc0UzR3ByeVBqWTFmR1duZC9ldjlrSmg0RXJYdXAvRkJicVNZMzZLWTZ5TU4yR1RLUVpYRDBqMVVZN1AwaW5rSHR6MXh3Q2luNnBOZ1lPU21obktPS1U0NlI3T0V6c0NjcVVwQ25tRXZBTmhRb2xqOEhvQWdyeWRWeU1yVUthMG11d0hxQ2JsQXNKYzRJamEzd0FWQkxBd1FVQUFBSUNBQk5tdHBPaWRnQ3VDUU9BQUNOTXdBQUtBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNQTldnbEFITmQ1L2g0c0RLeEdXRUlTRXJKc2JBbkpIRUk3dTdNWE1sYURBUjBKd2k1Z3FUaHQ3V0gyTGF5MTdKTGRBVW1PMnpSdG5UcE83SnhOWStkdzJyVE4zVHFIUVFwMjRpWnQycVQzZmQvM2ZhZXQwenI5LzVuWmcyVlhHZ1Myak1TYmQvNy85My92Zi85Nzg0YXZ2Zmo1THdBSWkzNC82dkMwZ2s4MzRUTituTVJuT2ZrY0o4OXdzcVJndVFscEJaZjh1SXpQSzFoUjhLd2ZXL0djSDAzNGdvSXY4dmpubTVCVDhGTis3TUNYL1BneWZwb3JmNllKaXdxKzRzY2VQTmRNNVovbHlwOVQ4TlV0K0JwKzNvOTkrQVhPL2VJVy9CSittWk5mVWZDckNuN05qd1A0ZFQvMjR6ZWFLZmViblBzdDd2amJXK0RINzNEZDczTHlleXpoOTFud0gyekJIK0tQRlB5eEh3SEc5U2Y0VXdWL3h0ciszSThRL3NLUHY4UmZjZTZ2dWU1dk9QbGJUdjZPazcvbjVCLzgrRWY4RStmK21aTi80ZVJmT2ZrM0JmL2VoUDlROEo5K0RPSHJDdjdManhGODNZOUIvTGVDL3hHNGVjTEs1bVJpMkxDTW9Wa2pNeU1USTRzeVk0M0wvSHcyazVjQzZxbE1SdWFHMGtZK0wvTUNqWGVlR2hzY254Sm9IWDNBV0RRQ2FSb1RtTEJ5cWN6TTdRSmJoMmlRWldTc00wWjZnUWJmY1B5ZXNhSDdKaWJ2R2g4WkhoNmNIQlJvY21wR0pndlpFNXpkWGVveWRISnc3TVRJOEgwalowYkdxS1ZqTkp1YkNaeVgwL29EQVdNNkZVZ1FVT3Zpdk13SGJKeWtzM0VnbFVsWnh3UXVkcTJGVkRaNlBwZTFzbVkySFRqTHhmSVdNM2R4M3NvR2hvZ0hFcGt5MHZuYkhVbHpoalVidURNMWN5cGp5Um1acTFIYmZVYkFONVJOc0wyanFZd2NXNWlibHJsSll6b3RtYWFzYWFUUEdMa1VsOTFLbnpXYklpNDdSMVBad0h6YXNKTFozRncwa0pCejJVRGVERXlrNXViVGt1ZkZtSkZrNEExbU5tUGxETk1hVENSeU1rOERHMnpjQW50cm15ZXd4U3paUS9OOFpYdHBObWFNL04yNWxFbncycXJiNmZRWlRjMmxMQUgvc0p6UFNkT3daRUtnZlh5QjVNekpNNmw4aWd3Y3pHU3lORXNwOG9XaU1IdFNTbU5JV0g0enA2dlVhbDBJRU1yQWtNdlpDYllxdTVoS3VCTzF3MXpiSUhESW13Q0JoNjRWTkVtZHpCbVpQRWtrWGs0YkdhTzJROVYyczFacmpReUJXNitxUm1CeGszRjc1dHVmTDhZWG9ybXJ1NXBTazNvRXhzbjdMVGxrcE5Qc2FNbUZqSzFRWUgvTkFIRGM3VVA5bXlkU014bkRXc2lSOXg3enBHU2dPc25IU0ZoOVhwS0REM1RWbUFhUEZtVGtlVGNJdm40RGtnWnE5cG1UMW13MmtRL2szRWhkUGszajBwU3BlY3V4Wm9hdDJVdHA5VWhQUy9TdXJnMXA2WGJNVzdCUzZjQm9Lczh4ZVN2UFVLSzBpUXg1aUhTZFY5NkpPS0pKcnJCWkpkU3RJNlhTMlpRMU81cWRFZWhaN1prRnIreGMyL2YyMWF2Sk5VYmdqZzF4UWE2NHlGcVlCNEZ0YTVscExvd21DM2FWTlEvbWNzWkZ0MC9iNmoyRHFIVDNqWUVLZVFQZXJXVlh1TGVhdm9GTm1Cb1d2blhDTXN4enA0MTVHNnVDRitpZ3BPQWJBdS9lWE8vYUxMdzM1NnYyT1o3T25uZklIdldDKzNWRXNSVVlzV2FQcDlLV3ZhWUpYVTZ5Q1l2eVFxQWdqWThwU2J1SGdINE5ZZ1hlc1lsb05vdkM4N1V4RGN1a3NaQzI3a3huelhOM0d6bURNSzdlTnJ4MHIwMG03U3BHenVrdUVGaW5XQXJPTXBOd0J6OTdmV3pZckNud3BiTUdIY0RlZjcyT3Z0NU9zRTlkeDFPVE40VHZlZmtQbzk2QVBYRmREbTdlc0RVbTVIdzZlMUhneWFxTGFQTzQydEJKVE9YWHd4VHZwL1pwckZWbVRIcFhTOWh2cXJrRms2d1JlUDRWYTRDWFFHRkhnZzk0TTJFamJyR2hhZmp5S3htZlo1WS9kTzJPc282Z3RTR2l2L0lLaCtpWjZ3OXZ5R05lTHJxLytzcEg2Wmx4djJHYU1wL3YxRFRORGlnZWhsM2xlczc3MFo5ZlVycFhFM2JsdDdlNkN4b25RVTVDQWtmV3A0b09nUU5tMnIwNXJPK3lyeW9tc2dzNVU5TFptYmVKVldZZVllNVYvQy8rVDJELzFWa1JkYm1vRnRlaVdsaUxoUFJ3WEF0R29rRk5DMnFSV0pTNGpXdkpSR1E2NHJRSHFTV285K3R4amY0NytiaE92OEU0NVIwSlVTMmt4WU5CVjRxdXI1WkNFcWdVaVVTMXBDTkJDMGU1UnUvbk5La241Um9zVkYySlJBdnJORFNxNmFiVG9sTXZxUVZOR3FtSGpLQ1JOQlA5d1RCSkNVWmlYRWZhWkRnMkhlUzZTTDlibHdpYk1xcWJYQmVMUkdLUjZaSU9Ha2x5WTlPUnFKMm4ya2l3UHhnUFJVTDBKT3Y2U1NYYnFWRXVxWE9mbU02bzRseXRsekdnUlJPcnNUUFNlSkRsRWd1dW51bTRvNGRxd2s2Yk00SktJZElaY1pqdjF3aUI3dnpHa29hTWhhTjZUQXNGcGE0WlJHRTRGT3ZYdzFvd0dJOGtRMlk0bkRDVDlFNGFqWnV4WUxBL0hqZU51R2JFa3JvWkN5VkRzUmpKTW5TYURhMmt1Wi95U1dtRW9wRm9LR2JRdjVDdVJlSWhMUnBOUnJWRVdBOGEwMGFNeFBTSFpGeFBSSU94ZUV4cWlYNk5LWlQ5WmpRU1pPT2lab2dLWkhNd0tDVmgwV1UwVE53a28yWlVEK3VzU0RPSXZKQ0tDYnpJeVRjcG9XTVBKVUxnbHF2ZG5nbnNxOVdGYng0VVVhZUtldUVUdUhGMU4yNGNsMG1aby9NVXJaZE9EKzh6T21OcTRLUlJZR2UxY0tZS1JUUUpkTmRDTkNNek1zZjN4NEY3VWhrckZJbXlzR1pGK0ZXeFJhaXEyQ3BhdkVFSnEvaFdqTk9LRmpjSTdLaHlMYUxnQlZWc0U5dFpRYXNxZG9pZENyNmhpbDJpVFJXN3hSNkJMcStoU21Cd3crOTZQSzJmVWtXNzJLdUtHL0VKVmV3amE3RW9ibExGeldLUEtqcHd2d3FMRW5HTHVGWEZhL0h0aXRpdmlnTjR6QnNkRVVWMHF1S2dPQ1FRWFBjMWd5cHVFMTNNVTdjaWVsVFJLdzZyb2s4Y1VmRldQTWJBSnptWjVjUzI0NXdpQXFyUVJGQVZJYUZ6RXVZa3drbFU0S1lyYmlnQzI5Y3c1YzNFSUNPTWVldkxhMG5FQlhaVm5XT0JsdFZYVXJSYmxDcE9XZXloL0ZKeGs3eGc5N2VCRjI4RVNtNXhzZXY2Ylo1dnFmWmFlZDIrbmozODBxTHgvTEhpOGMzRHNUbmZleDU1eVFGNTVtWmJSWkRrYjhIOE5aRGQvMkRYYTh0UTNUWDlnRFNyZmhhNHpkT1JrclZGYWhwZWtsZFo1bkg3NVFWcExsaXlkUGlkb0tGcGFmdi91TFFXY3JUaFRkVmVlTVZ2U21YcTdXL2ZYbDhIMm10OTdDRnd1MHFBaDdMcHREVGRUNlROY203ZXV1aEdrcTRxdk8xYlkxWFpWQXFjOUdDUFIvaVp6WXRKM3I0VStmS3BCNlY5QWo5RmhhNVR6Rk5UcWhoRDIxYlJVWWl0TkU2Wk5mSmpGR0R0b2ZmUzBJeGQyRm5vWCs2SjVLa3owckpqcm5hRmo0TTEzaFBxMHp4d0cwazRsVW5RUkNRS0g2QjJFZHBxeXBxb3EzdloxSlJOSjl4c3ZaRkk4SmdxQzRYZzc2bTFoR216a1hiUUxuMlkyRlgxUnBrMHpCbnpBa2U3VnQ4NEY3NmtydktGV3ZmcXJRUjlxUEt2RFZaeld2eGJqL3hMZkhPK1ZpZjd4dDdWN21rNzVZaDlvMGZlMHVqYzdRbm9WM1BqcWhhMTBCUTU0V0l5TzU4eUJZYXJSQ0V2L3VNY2tJcmZiaXFPTklWNUtNTGU3c0JlZFNQWjJiVW12RldEdk0yNWdpMnRZWUhMWFd0aTE4dHh1WG5sTGNwaitIbjJHckZ2L05ad1UrQi9jUk9wWC9mTjBLWlk4S1hObllEclk0U3Y2MTRPRlFjOW5DRzZ6K0JXMU9Fa2dBYnN4V3N3Q29IVFZLcERQZG94VmxadXB2SmRaZVZXS3Q5ZFZ0NU5aWHFucFB4TytQaTFoeVRjUTZVTUZEVFNzNldudGI3M2NGKzdyNzFoR2I1UDIyUE9VTXAvcGdmbzJJb3d6bEx1bU5NYjM0WXB3TTdkYTJ2aEhMM1kyYjFiOEIzNFRwTFB1ZnR3UCtuam5FRzVCa3pibzB6NmJhUlJDWG95R2tsNVJqTk50UTMwVkF0b2x0RlFpU1dHTFlqYldNSk8zeUlXdFloRkxXSlJpMWhVSkRGRDJsamY3SldzYjZ6VU9FRFczN0VPNjFONFlGM1duNnR0dlZLSjVWVmsvZUE2ckM5Z0tWZ3ZrTVljdGJHK2M2N00zaFUwVGJVMjF6OEgveVZzOFQwSGRhcCtCVnVuZXBiUk1rRTF5N2hodEtlM2Rkc1N0ajlkaE5OcUd6WU0vb3ZOZlRpT0F6aGh3MnB6Ukxxd0RxQ0pTTTZTMm5sNzVPc29sMFBlQlpBbHQyVndCMjBBcmFUWno1cDNUUFV1WXlkcnZvUmRwUHgweitFbHRGV3FmZzEya1cvdm9WWFFRWjdQcW05eGhCVVpPY2lYRHFTd2czaGxFSFV1aUFXcVc2ekJ3dTRLRnZZd0MrMVhZV0dDUkV3U0MvZVF2V2M4c25BZUZ4d0E0ZzZDclZEOW96MmZ3ZDdlSmR4NGVnWDdwZzVmeGswQ3k3aDVqSElkZEhMeXRmc3U0eGFCSnpETnVWc0Zuc2Yrb3cwck9EQzFqTTZqamUyTjdRMUxPUGdNRGptNTIrb3ZvNnVPT3Zrdm81czdiM3NHUFc2VGIyMVRiMTk3NHhJT24vM0lONS9zZTlwMlRMYXZoeXdET1ZZenVkUnVjcW9JTGFkanRLQk9rbXViUk81M2syTS9USTc3Q0pVS0MrUVllY0pGUEVpNUNJV2cxK083YkVkOXREZ3RqOUtvTnhBRHpYZ2p2b2QrT1RqbDhiMzRQdUxoKzEzdW5MYUhpMjF2b3JZZm9MYnRxSHNSSFFvZVVmQm1CWSsrUUN2Wm9mUXRKUEN0ZU15ZDAxY1RmSjZBdHA3UG9hLzNNbzdVWVFVQm5rcHRDY0hTOURYYTYyV21iTXJhaWpEYjhEamVWcHl5dDl2eTMxRjAzQVo3NGp0V0VKcnFQZHl6QkgwWjRiRSttc0JMaUN3aGVyYW5id214a3FJVzJ6VVg2TGxJZ2ZpOHJiREhFVkZVMklGMzRsMDJvQTY4bTNKMTFIdTdEYUxlQmZHRHhNdDc4RU51OExxZnZJYVpiVmxCM1ZTUEd6RGlsY1k5VkJZc25IQ0ZZcmdTeFdCZFZ3eFg5Y1Z3NWFzU3Jsai9lNitrdjc5Uy94dXZxcDlEMUhyMFArR0d5MG1xWlFiVmd2NWxISzNVL25BWjAycFJ1MXJVcmhhdGR3Smt2YTNoeWRvYWJxL1U4T2FyYWlqWVY5THdQcnpmZGFRSDNaRGZXWXA5ZmNYWU4zRFUxMXBIYWx2cjIzMlhjRWRKc3hPd0hxTzE4WGdadTUyMlR0ZzV0a3JZT2RaWlorYytZTE83bXphekR4SktuK3RUVDlsNFByUitQTWNxOGJ5VFpMK3JCaDdtd0J1ZUg3YngvQWlWR2MrYjNBMzZVQWtQZTFrUlVJTU5xSThRTlZ6Q3QxUWllaTl0RDArVWJkeUhpb2dPRlJrNlpIdGRuWjB6WFA4N1pHUHowZWdXRzF0aDQzWVFmcmpDSTkrSEg3MFd0SytxUlB0QjB2ZFVEYlFGL3RhUDlzZkswVzVyd28vakk2NTNqOUJvSHE4UXBpV0lTc2Z1TE50VEZYelVEVklLUGthblNHSG5QbzVQMElnbWZCS2Zja1crbXVqZ241NFZERTYxM3RuZ2JxSkRVOFRDOE1TVWJ3VWpuRDN1N0tjblBvdTlmTDRSWlNHeWp6UWVRVGM5Ni9BVE5xS2ZKS25BVWRKM2dFcW5TRU1BenM4ZTk3blZmWTdZYVJPRzNPZCsycVllUXZQL0ExQkxBd1FVQUFBSUNBQk5tdHBPWTFJN2xWRUJBQUFhQWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNaTVqYkdGemM0MVJ5eTRFUVJROU5jYjBHTU40azlpSkNCWkt4bU9CMkFnSkdSWUdDN3ZxN2p1dHBMdHFVbDNqOFZsV0Vnc2Y0S1BFbldiREFwWGNPdmR4NnR4N1UyL3ZMNjhBTmpGWHd3Q21Ba3dIbUJHbzdHbWovYjVBZWZsNjVZcmh3TVlrMEdocFEyZTlMQ1Izb2NLVU14TXRHNm4wU2puZGo3K1NaWCtqYzRINnNUSGtEbEtWNThUaFVrdGIyVTJWNzFpWGJjdVlNaXZ6U0xaMTFrMnA3YTFUQ1MwMmR3VktEK3NDNGxwZ3FLMFRvM3pQc2VaSnk3cEUzbE80Y1N0VnFPWEZZNWZPcVVPT1RFUjdQNHF4OHNveklaY0o4UWpLVXl3dnRmSE5yZTNkZmU1UWE5dWVpK2hJRnl0OG0yRHRWdDBwM3ZUUVJLbk50VWxPeWQvWU9NQnNIV1VNQ2l6K1p3dUIrVi9HRlZqNFd3VHJLUEdYOUk5ZzQ5Nk1GZloyT0Y5aXJLek9QME04c1ZkQzBJOEwzaHFxZk05OE1qQ0U0VUtoZ2pwR3VGN0dhTUZ2WUt6QWNVd1UycE44MXdvVHhVdWcrZ0ZRU3dNRUZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUJObXRwT2ZZS3ErNlFCQUFEbEFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpsVkpOYnhNeEVIMU90MWtTRmhvS0xaUUM0dEJEMHFJWTZNZWxWUTVFUkFJRnBLWWxGeVFrWjNlNmRiV3hnOWNMNG1mMVVGWGl3QS9vajZxWVhUZ2doRkFyeTU0Wis4MzRQWHN1THIvL0FMQ0ZKdzNNWWJtSkFQZERQQWl4SWxEM3h6cGZleTZ3TWRSV3pqTGxqNnliN3NpRXBsYm1zUnpSNTRKeVA3QnV2N0JlZVcxTnZzdHBlOXBvM3hQb3RxK1IxeGtMQkgyYmtNRENVQnQ2WDB3bjVBN1ZKT09keGFHTlZUWldUcGZ4NzgyZ3BDY1F2VEdHWEQ5VGVVNGNkcTkrNTlxTFRhYmJPTkNwVWI1d1hQTHQwTHBVZnFYSjVvbFVFeTBQdjgxb1JFZmt5TVMwOTlkaG9yZ09BM0taRWpOUW5oTDVRUnYvY250bnQ4ZUZtd2UyY0RFTmRFbDI1VjhFdWlmcWkySzlyMDJjMlZ5YjlCMzVZNXVFZUJoaEZZOGl6S01lSWNSamdXZlhVU1d3K2g4ZEFwMHJGK1BmVE1tUEJ2c0M3ZmJIVjUwL25tRG1yTGV4eldSc0hYSHkxSHJxcXl4ajVYUHR6aGhQdVo4Q2JpM1JhcFU2U285bmlCdHNHK3oxVU9NQk5OYzN6aURXejFFNzVhaUdKcS8xQ3ZzSk4zbGQvb1ZDaE50QTVjMVg1d0VXS253TGR5cTdpTHRzQTl6REVtNVZPQ1pTWmVBblVFc0RCQlFBQUFnSUFFMmEyazRVT1JSWDJnQUFBTkFCQUFBUkFBQUFVMmx0Y0d4bFUzUnZjbUZuWlM1emIyeHRqOEZPd3pBUVJPLzVpamxTQ1ZWdzRGUnhnaitJeExHU2F5OWhKY2VPN0hWTGhmcnZiQjBTa3NKeGQzWm4zZ3pKZEwxQmpwNGR5eG43aCszVDluSFhORFlHU2NZS1d1NEhUNjFFdlNSOE5VRGhJQmpLd2JORjFqMjVWeU5HZndBNmttcnR2SHo1TUtFamQxZGZPRGo2SklmbzNadnhoZTZ4V2djNjFmV21PbWwrbGxTc1drM2ZMR3o4ZURMRlgzR3dnTUR6Nm02bjh1WHE5bDZDRlk0Qm1XUzBtOVBXVmxXYkFOVnQyZTlQMU9SUmdiVjh6LzkxLzYyN2FIakwxU25YakhKa09pR1JsQlF5Umx5ZDlIWHpRemxxTjNCcWVHbStBVkJMQXdRVUFBQUlDQUJObXRwT3NsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBRTJhMms1b01pR25TQUVBQUNNQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVEl1WTJ4aGMzT1ZVVXRQQWpFUW5zcGpBVmRSZkNUR3F3Y3hoaW9xRndnWElvbG1OUkdRZTlrZG9HUnBzZHZWK0xNOG1YandCL2lqakxPckoyT01Uakt2YjZaZnZrbmYzbDllQWVBVXRrdVFnWW9ER3c1c01zaTNwSksyelNDelh4MHl5SFowZ0F6S25sUjRIYzlIYUFaaUZCSlM4YlF2d3FFd011bS93S3lkeW9pQmU2RVVtazRvb2dpcHJYbFM4MFVvN0ZpYmVZTUhPTmM4OG5rUDcyS01iRmVibTFoYllhVlcwZDV4dmNtZzJKY1RKV3hzaVBMUzAyYkNIM0IwTXVOaUpQbmdjWUU5SEtOQjVXUHIyekFReEVNTEVaOGdLUkFXQTM0cmxhMmZOWnB0SWk3MWRXeDg3TXBFN001UEFtb3pjUy9vM25QbGh6cVNhbktGZHFvREI3WmN5RUtPd2VGL2JtR3crNHQ2QnRVL2s4RVJMTkUzSmNiSVNRcmxQRldjY29Ma0RwNkJQVkd4QkE3RmZBcDJvVURSL1Z5QUlpeW5UOTEwYXdWVzAxeUd0UlJkcDFoS25SR2FXT0VEVUVzREJCUUFBQWdJQUUyYTJrN2tmVjd3UndFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjNVZSUzA4Q01SQ2U4bHJBVlJRZmlmSHFRVFJhZzhvRndvVklva0VUQWJsM2R3Y29XVnJzZGpYK0xFOG1IdndCL2lqajdPckpHS09Uek92cjlPczM2ZHY3eXlzQW5NSldHYkpRZFdEZGdRMEdoWlpVMHJZWlpQZHFJd2E1amc2UVFhVW5GVjdIY3cvTlVIZ2hJZFdlOWtVNEVrWW0vUmVZczFNWk1YQXZsRUxUQ1VVVUliV0hQYW41SWhSMnJNMjh3UU9jYXg3NXZJOTNNVWEycTgxTnJLMndVcXRvdDk1a1VCcklpUkkyTnNSNDJkTm13aC9RTzVseDRVaytmRnhnSDhkb1VQblkrbllZQ0tLaGdZaFBrQVFJaXdHL2xjcld6eHJOTmhHWEJ6bzJQblpsb25YN3AvZVBadUplMExybnlnOTFKTlhrQ3UxVUJ3NXN1cENEUElPRGY2ekNZT2NYOFF4cWYrYUNZOGpRSnlYR3lFa0o1UUpWbkhLQzVQZWZnVDFSa1FHSFlpRUYyMUNrNkg0T1FBbVcwcXR1T3JVTUsybXV3R3FLcmxFc3A4NElUYXo0QVZCTEF3UVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFM0xtTnNZWE56bFZKZFR4UXhGRDFkaGgxMkhXVUZSQkUxUFBDd0MyWXJxUGdBMlFjM2trQldFL25ZRjU2Nk01ZWhaTFpkT3gySVA4c0hZK0tEUDhBZlpid3ora0NJTVpDbXZmZTI1OXllMC9UbnIrOC9BTHpDc3dhbXNOaEVnSWNoSG9WWUVxajdNNTJ2dmhCWUgyZ3JKNW55cDlhTnQyUkNZeXZ6V0I3UXA0Snl2MnZkeDhKNjViVTErVGJUZHJUUnZpZlFiZCtDMXhrS0JIMmJrTURzUUJ2NlVJeEg1STdVS09PZHVZR05WVFpVVHBmMTM4MmdsQ2NRN1JsRHJwK3BQQ2N1dXplL2MzWGpEY3R0SE9yVUtGODRicmsvc0M2Vmx6UjZlUzdWU011anp4TTZvRk55WkdMYXVYYVlLTzdEZ0Z5bXhBcVVwMFFlYStNM1gyOXQ5N2h4ODlBV0xxWmRYWXBkK3BlQTdybTZVT3ozbllrem0ydVR2aWQvWnBNUWp5TXM0MG1FYWRRamhIZ3E4UHcycmdTVy8rTkRvSFBqWmdJektmbXlabHE3ZmZLMmMrVVJKczU2Rzl0TXh0WVIwOGVNNnFzc1krOVQ3YzRRSy95akF2NWNvdFVxblpRWnp4QXpIQnVjOVZEakFUVFgxcjlDckgxRDdRdFhOVFI1clZkWWl6dThMdjVCSWNJOW9NcW1xL01Bc3hXK2hmdFZuTU04eHdBTGVJQzdGWTZGVkF6OEJsQkxBd1FVQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJPMVhUVy9iTUF5OTUxY0lQU1Z0bHJTSDdWSmtRTGVoUUE5RjF3NDlEZHRnVzNRbXpMRmNXYzRhRFAzdm95VExrdndScDFpMzAzeHBZMUVVK2ZnZUtSY2lXbThpVXZLTVVTWjM1T3ZwNHZYaTdId3ltU1E4bHlKS0pMbURod3BLZWNuRmJjVmxKQm5QUy9Kck1pSDRMSS9KSy84aGQ1ZTM1SnBUeUZydmo1ZG1BK1RWUmhsOVFrY1Z1cm1EQk5nVzZKeDhnQ1JqdWZwUEhRTWZCZDh5Q3ZUSjdDdWxxUHBqd1ZCSS9jUTdDZVhaRzhMb09Wa3V5WDBKYVpXUmxBdFNDQ2doVDRCc1FiQ1VKWHBuczY5aXVTU3NMQ3VnRi9LOGVZMW5zbnhOcWpoejcxem9wZjVqVnVvZ1lRdm9DRTFzVmxNWDBUdzhaZTU1bnltNGU5SFVTSXpqcWMwc29qZHBDcUtCTTRUUCtQdW5nUG14K1pENXg0djA0WXE2MXhHbGVEcWFWMFdSTVJBOUdHdXZEY3AyQThzcFBBSnROczdERTl6UEI3WDlhcVFtUVVVdE8xL3FyT0dhS3dVcHZHQ2c0dHBOZ1NHeWhPU3h1RWx4QTJKcW5DM0pkVlNVUkg0SHJDbVJYUCtIQm5wMUV4VUZwdGVRY3ZXMlQwOHpsVUE1UXNsbkJhaTM3QTlSZ3pRVXBONC9NemJEZ1NuY2tpZ25QTTkySkFZc1RMeGhVbUtKNGgySlNGenRRQXhFYkd0YUNMWlZlV25iT2w1c2cwWThYRXhuTmkxUFFkcnRpbXpLOVFJRlExdHNUYXM4MFUxcURmS2RNcjB3UnpsWFd3WS9pUUJaQ2V5cWxsMHo3d1N6Wm1QeWZHODRSV1hpNlNwajdYd2E3bnVvbUlDcGk0eXNWc2JOekdudFcrTnlHTldNcnpIUWZ1ajhCTkhXYTNnREdmYjNrSG03aDJ4Z3c4Vk9LZEV0dFh1dlh2QlQxdHo2b1VvdndES2Z3Q01yWmRtQlJaSDhNNk5mRmtoQ3hBWGpyUXV1SGhzV0Z0YlpkZG9kQnVjYkJHM1BST2d2OTh5TEJqekQxUkMvb2Via2tHa1FiZ2pnWUk0NXowYWhZYVduRXEwYmppMS9ES3JUeDFNZnEyQlZUWktlRlFkbkYwVWZQelFJVUd5Qmg4c05CeGEyKzN1aE5PM3c1TVQ1QU13dm1Na0tXb2RxUFg5ZHpscHRxSGdZVVlacGhJZHFRMXYvVlhWMEI2MWJDMGZUNEtBZEY1VHV3VU9TTWczNkVGSDVsZ095OGt6NmhlVVp0TzhWT3MzUXBIWEZzQm0zL1BSZE9Gb2liUmV5TS9jUFZ1M3p0THF2amVtVExlajZoNC83UUJFUEZIK25xQzM1by9mM0F0VFVkSzZqSE85Rk9ERHhFRGxJdHA2aHFSNTNIaG9Zc0R1Q25mdGtYOVFYM2hwKzY3NFY0MzFCYll3SkZ4aEl3WE9xQ21NdlJ6VnZHakI3T2s3d1hkSnVPK2FTMDJrODRVWFZYUmJyYUovZGl3SkdVbk1wYmMrTmZZVDh6NzQvWTkvUlVVaSsrcnZnUmVqSFVqTHRvMkRmMVBNcmRnQjE3ZWVMeS9UcE1QNzZuejU3MlR0QzNLZkpiMUJMQXdRVUFBQUlDQUJObXRwT2xnQUJZYjhRQUFBVExRQUFId0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzUEZXb2Q3SE1kMWYwdVVCVTVIbTZJRVNTQmxOZG95U0JHODdRVlVaWXVnZ0tSRTBsUW9LYkcyZ2ljZjd1QzdBeVU2anUwa1RuRjZjeElyMVhJU0pYSnN5MHBDUWxic09EMXhtdE43cjM5RHZpOXhmbTltOStvZURxTDhmUUY1ZTdPemIxNzl6WnMzZS9PRi8vM001NGpJb3Y4cVVZWENFa1VVbHlpaGxGdXJKYnBJMVJJOVErOHFVWTNXWnFsT2pSS3QwN3Y1dHNrUFdrelhacm9Odmx6aXk3UDg0TGtadWx5aTk5RFg4dVc5UE9qclN2UStldjhNZmFCRVgwL2ZNRXZmU0I4czBUZlJOOC9RdDZqMHJTWGFTeCs2anI2TnZuMkd2bU9HdnJORTMwWGZ6WmZ2VWVsN1MzUVg2L1o5OVAwbCtnSDZNTGQrOERyNklmcGh2bnhFcGVlNSswZjQ1a2RWK3JFU0hhUWZWK2tuVlBwSmhhYnZyZGFyN2ZzVm1sallmMTZoeWFPTk9GSG96U3ZWZW5KcVl5MU1tdWVDc0lhZTNTdU5LS2lkRDVwVnZzODZKOXNYcXkyRjlxNVVHNVgxV3RCT0c4MDFweEluYTQxS0s2cWNTMXJ0d3lCYUM2cDFoVzVhZUhMbG1lQlNVS2tGOWRYSzJYYXpXbDg5TEVRR3pWVXd1YUhnc1VJek5SWjdxdkdzUXZQeWVidTZsbFNFTXNlQ2RuSU9keUJUcWhBZ242OEY3WXVWSTlYVjVYbzdXVTJhZURoUkh4eitSS09leEQzRGQxUXh2cHkwTHg2dFZaTjYreDFuVnRqZ0FuV21uazFDOHhtRjlxdzBtcXNWY1ZOWmJ6YmFqYWhScXp6T3R5QzZMbW9tTWRoVWd4cnN1cTJITkdwZVhtODNLa2U3ejBFK2ZXVDUxRU5uTHJBQ3o3V2JRZFErZmdrUEZYcDZvV2RrRUZZcmNkQU8ycGZYazFaRlVCd2VWckRBd1FNOHhNanpRVzBqWWRGVGw3alZyMk8vcEhPNHNuK1hRWnhJdlc0Zm81WkNzN1hHNnJuR2VqV0MrU3JhOEhRQU85dFoxMXhTajRDeVdKQ2ZyYTdXZy9aR0UxcnNyTmJqNUxra2x1b3B0RXVhczlHdTFpb3JWWUdsWGZWR2ZibWY2dnBzMUtOQk0xaEwya216eFZEb0F5dVV5d0NyRGJDOGQydkQ3NGZJMDJPR01PR1pKRTJhc0NvWnk0ODU3anpiRHFKM25ReldoVklxTGFuMFVaVmVVT2xqQ3BYT05qYWFVWEtpeXRyTzhndzZ4T0xMcEpHdTBrK1Y2UUg2YVpWK3Brd3YwcytXNmVmb0paVStYcWFmcDArbzlNa3lmWXBlVnVuVFpYcUZma0dsWHl6VEw5RVZsYTZXYVpOZUxkTm42T1V5dlVhL1hLYlAwdWVZMGErVTZmUE01YlAwcTN6N0NVaS9qTC9Ga3ljWDQxaWxYeXZUcjlOdmxPazM2YmVZdzIrcjlEdGwrbDM2Z2tJSHo1eDQ3RXdTSmRWTFNid1FYbTRuTGQwNXVGR3RINm9nMkhmZ3IyM1l6c0dXUU9CK2xYNnZUTDlQZjZEU0g1YnBqK2kwU2w4czB4L1RueWgwODhWMmUzMnBVdEZkNDVCdUh0SU9HZHFTWjF1MlF2c0taaGNUVng3RzVXelN2RlNORW5ZSmRQclRNdjBaL2JseTY0T081bW1PWm1tMllWcWVwdHVPcm1tNlpydU9wdUZKR3R1aGplY2FudGtXdm5WSEMvamV3SmVwKzdwam1ycnJhemFQaTVNRXZERGVOSGkwNmZNMU5kT2tLNE01bVNCaEtzKzFYVGVDc0d2OEV6SnN6WEpNelVzc3lFazlYYmNFNThoMklkSFU3Y1JNb0tMbzFlRWkwV3RHYVdyRmRpUjZEY2VRdlo3bnVWWm9HTEkzREdSdkdEbVJIVWFTcitrbHNqZldMVDN5VFUvMGdxdnNUVjNUOTZOQWs3MXVScHNHV3FUYnV0VEI4azFRaDEzZmRuM3Vld00rUjErVWVkNTArTCtod2I2TU9rajdxVTFieHNicml3MUxqQ3piWVlud3Z1NXBudVhwSEFVRDFFd3J2azBlQTk2NjVCM0Q5alRoTVdtcU96MzBvSUVQRE50Z0x1alh1ODk4M1lac1cvY3puajd1UEZOdzF1d1FyVnh6WFdkdllhVEc0OEZONi9CZzJXbksydHFhL09lTEQ5TXlYNTIxeWJoWUlwWVliYkpVSjdNQ1hCaGNqS2pNQS8wYU1tZmZ5cm5iV3U0VkgzYjVRR3BQUE1CektCNjY1NDJJaCs2NjI0eUhIYVY5OFhBSzRpSEdkdUtoQjhhSWVGaE9PdTVQU04wV1ZROWZjMmllTzhNOWhiaHdyaGtYaG1GdWdRdERDN2VGQ3dOUHJ4VVhUaGNYWTdCaE9Na1FOb3pBNmNXRzA4V0c0ZGxEMlhRQUdaNXUycUIzb0poQWxZWjdINUxSSS9UZ2UzQnlZVitHSGVGVDRFTzMyZS9zWHc4ZmlVcjJTcisra1ROT1g2OUgzemp1cFM3UTFzaTBOWWEwMVlWdWh1alJ1eEh5UkV0NFJUeHpyRzdXNytBY25IdmxNcVdNSGJkeUdpUHNvOUZZY2g1SHo1THhoc2N0SHRFbnhVU0hLM2xZZmZiNUVwTUNSNXIwUDhmYzBuTDBDUno0bVFXOGh1RzU2UnZTdnQ1WmczL1ExYk5Nd2QwM1dDZjJDK0tETzk4V2Z2Zk51RGNEY1R3N2NUTDk0SFhneWd6MThYRWF3SlNlUjhUcDJMTlZSQkpqZkVSUzZ3MUh4TktkLzhlSWhQN29pS0MyR0lxSTVVUmM2MmhKLzF6Y3hqeTB2T0g0WnR4MHExK3VudzVUQnA2Z0RIcmxEdVpsV0djZ3U0M1VwUUFsOEpESTd4M2ZTWjl6Q3pKMHRDem15cGp4NFV0dWRjWWJjdDdMMmliMXgrRFJrbkpZcjY2Y1hLckYzS0cvSVZZSXJ0WjRKUHVWVjBiYjhoeFlKUEtPWEJYQlNGU1pNRXprSXRZUjNnUm1HQmZRazJlTnhkbVg3NWdNOGViS3hiSU56dlZBQXNhd0pDREV5UHh1KzdHbzJuaE5ZWi9iTHM4QUlZMjFzaTFHSWI0Tk9hc1lUOWtvUjg0UFg4d3VUWk1ZNUpiQnExVUlHMFhsSlo1bWMxQ3UrVHdQbUlmSEs1Y2g0eVZXTk1FdFgvT0d2UWw3bkNKL1pyNlUwb1VmZmN0SEZtQzBNNTgweFVoVGVFelA4YjR0VkpoYm93S3hFNTh1SHhFUkkwTUh1c2VnWTlBYUlTKy9nMFU2ZTBkWXBZc1ZQa2VJSVdLWUk4UWNpUkNlRzJZUFFteUJFRnVUNCswZWhHRDJvQnJYQktiMEFZUTRRZEtIRU1jenQ0RVFIdlZHRVlJWWJvV1FRb3hnWithN1JYN2x6SkFqeGRlTnJKb1NIdVc0aWpaUTQwRmJWNkpHclBpT3RGUlFXSDE1d003bDk5YUkyTzFvWTFCbWJpLzM5R0JLNzJES05ZMHhtQUxvaXF6dnpoRzd6NG9NT2E2ZDlQUE5jMjBrdk1UNEtNSXZlMGhnUU5aRkdtY2R6Mlc1cUFCMW1kV3c1elVrNTZ4ZTlyUnM3WkFjd2RQajJwK2o0NFdlaUIxb2ZhNkdUWk85eTIzNTNMZXpjU2I0R3h4clNIVkU5VzBOZU16aVhPRnpsV2JyTHFqUkV0bVU4NkxvUlkvSk92Sks1Z3ZmSmo3N1hlWlBPUk1FSnJFQ0dZR3N4Zk42VHF4Q1pwNm54UzdGbHpzR3J1ODcxUVFVa3ZzWStGbThNYkJsWlRqRXdkWEc3VmZrdEpKWTdMTVU4enRiQ1F5NTBtZnZKdUMzRE5WNkYrRkNsamwyYzlTN2t5cGNiZnNsYVVYMS9TQUtSMlJxdWNQcjI0MTdnUzY5cGx2eVBwYVkzK2JhMmovTHBaemVLSFUxRi9QSHlOL3ljS3pabXQ0cVkyQm11YkxPa0JpVk5TRlhZaUtLdHNCblFYM0M4OTNYWFJTTnBwYTREbERrYXJvUjZ6cFVSTFlKUW15a3NkZXpUUXMwdWh1bG1wRWttbTBhRWZKSWJNVlJiSm1oNzJwK1QzWGppQlNQWGJKczhUdVdubHF1VUhmckRXUWQzeG0zUDlLSzE3SXhXY2YzL1d2SU9tNWgxdkZFMXNHS21MY2xMakhXN2NrdVRwWmR2SjdzMHNrK3ZwWHJMaXNtcmpmQTN4NlJYM2lud1Y1RDBFQnZaM3R2NkRLVVdRSzVjL3d5WnBiQU5Jc3ppNmQzZUppZW5uUHB6eGQ1cGJDOXJOT3BuWGptdTJJdkliT0xLV3pOczB0bmxnM2tDNHN6d2V2Sk9WbDluZWVXd2VqN0hQMWhKSGRyYXNZRHIrNitNK1JEcm43MTNBWXZ3N3ltWi9jVzRpWHJHTU9MZWFZTCsvaU8vUmpJdkNKM2tmS2RvZ2NJd0Q1RHpFQit5Mlo0bnVoeGVlVnhVenNNZE04M1RRc3dDSk0wQWFRYzB3M3N3TFNzQkQ3RjB1aTREalkrV21BblZoTDVwdVA2aGh1aEJFbVNNSFd4V2tYNEpQakU4dU56cnVlcU04TVJvOTBYNk9YcW56OTliNWhDOGY1MzFCdW0wSXkyOVlhSjY3UnJmY05rajM2LzFNbGU5dUJlbEJFbGtLVDVCUldXS2Q4cmg2SDd1aXNoZlJzNUtVek1jWHU2SElFamQzVkFGZWNsZ1M5VFpodzVIcm1HczRVSnRPVnJodTN4S3d0ZGk0d3NSNGlJMnNQNVlkVDZ0L1U4S0ZyL2hNd00rMElYWGV3aUdMOHlaN2c1MW4yUnp6aXJjT1VtNWtlZXdReFo0N2xwaE9wRnM4TEVjMXpOUWYwYlI1SG1HRTRhV2w2Q1pTTzB6VENLb3pTT2tKdkRXSFBTMkFxeHd2bUJGME5rR0dPKytOMlB3SGUyRXZXalhLNStoVGlQSW04TG5FZWh0aTJjUjZuOTVYL0RqbHBHb2h5enRnL2htdGo3eUxiUjA3WUtmblBDRTErVHU2azh4M3BDdjk1OVgvYk9tbmRMVnRGK3EvdHVTZXdDMlg3czhUcTd1aGlWaVN2dHp0Nk93d3Y4MndYWHp2d2NKVjJtZ2FiTGVvbWZZTStjUDNYbG13dEJrNjlUb2gvck9LL2xkbmQvMkxQakE0MGJaeGhITzdEa0xsMjBQZGt2YlJlendlV3gvTTROY2pNSlFmNDJUcGZyaFloNXpMdlBOTUhDYXp1R0crQ2ZZV284NlRRek5DSXo0TmN1bG1NWkJyL0U4U0luTk8zWU50SWtBaGpzVkV0U096VTFaRi9Ec3RJd2NnTXJ0dUFjRFVrRkRsWklPYWpTUjh2MEYvU1haZm9yK211RmJ1ais4dnRRc3hsYzVwOS9WWHFoVEg5RGY2dlMzNVhwNytrZnl2U1BmUE94TXYwVC9YT1ovb1grVmFHOVcveENYS1ovbzM4djAzOHcvL21Sdjgzemo1di9DWUtSNXlvVTJ0WDlyZjkwK0V3UzlYZkpuLzhWZXN1V3Y5VXI5S2IrSDdjVnVubkVJUXRZdGJCL2l4TVl1L3BQVnl6SEN1MXNYVzYxazdWalNScHMxTUQ2eGo0R2tvclBQd1J0Yml1MHVERDhlSEJFNzZtTm0wYzhVbWkyM1ZpdXQ5b0JXempYSnpYcnh1anJoem9WS3JjYng5Y2IwY1dUMVZxdEtvN0VQQUsxaTQ2VktLU0tzeE9uVTBScDRaSDlvODZlOUlaRWVBTmNHeHVzbGh5QkFEK0tTTFVScnlSWU81eGpycjhid3RiNXJsWm5jMVlHQXk5TzBjeldHdlhWOC9JNFI3bVI5cHB4VTBlL0FSZk1OdEtPNlE4dUZKQnNIWTlCQ093ZGltOXZ0TlRWSkl2ek5ZZ2FaSFpYOXhIUGphQmR5UitlRUxkdGpoRE1lMVEwNFRadm9laHN6SGd1akUvNVRDRy9WMitFY3IzUkRHcVlqYkx4VUJRbHJWYWptYlB0UHpnMFZ5UWZZYnV0Y0lhZk9mSFlXVXpValJha1g4ck91ZXhiMlA5azhUbXJEalhMR1RwczlIRFF1cWhRcVhVeE1QT2tjUGRvWi9ScnZiOVlYdkp1YU5TR2p4N2JhRUJ3dFZIbmN6aDhLT1Q0MGVQTDU0OGZlK2Z4ODhkUG5WTm9UMEdDT3k0Ty95QTgwL0lZa0VMbXVJTk9oYnJkTXVvRWxrSlQ0VWExaGdSMDM4TElZMXJaSVpLKzgxRkRCN21tV3V1MUtnTC85aUovRlI1WG00WnJ4S212d21uNkJISVdac0dwemhtbTNqTkx1L1BaMDN2ZWFWKy9ZMDVzMUNOMjk1bWt2ZEdzSDB0eVQ4YUo5S1JWb09nZzB3SXBOMEtwQW8wbVc5WDNKQ0lMTHVNS0dqWnJlZit3WVZCZWF0QjdORXVoMDBYYWJMRTBEaDFXR3pxR05oSEVNYytFUVJPR2JEeFBkOUlocWhEL1RaRENwNmR3TlhCWHdiZUM3NmtEVjBuNU5Cbzd5TVIxV25UZVNoYXVaVWxBTmpuNG5pV1hQRGxZV1FPeldmUjlhcE4yck55elNSTlhhUElLVFYyaDZVMVNUNzVDTS9kY29WbDhIYnhDcFUyNkRnU2JWRWJYSnUwOHRkZ2hYSm9FeWFLa25KK1VwTGg5MHlhOVdYWnUwaTdaMkgzOUp1M0dveHV1MEkyaWYyN0N5SjdjdEVrM3k5NVg2SlpObWtkNzk1NmxxZGRvNzRYNXFhdDA2eWE5WldsYVdWSjMzN1kwMHpYekVkcU42MjAwU2JmVEhOMEJnKytFUi9iaDJWdnBBWG9ibmFDNzZVbGFvSmdPVUlzTzB2dnc5RVB3M29kQjhSRTQ1MFU0NVNXNDVaTndDcnZxS2VrTzhta0ozNVAwY1RwTTk4SlpjL1E4M1VmM0M2bnZCZWNINGJnSGFKMGVRdDhrT04xRVIrZ29YUHdpemRBeE9nNzN2NFM3RS9RVnBJSzNRZy9qNlF4NEwwTmo2ZnIzWTF3Sk1qYnUyWDM3RmJyajFBSFl2RFM1T0dHd0IrOThucWFVbDEranV5NWNwWDFMVXdjUFhLRzNidExibHFiUnVIdEpuWEJtNW1ibTFWZnA3UXE5UUFjVzUyWW1uemJtMWJtWlYybGhCMzJlOW0vU2dhWForYW41MlZmcG5oMzArQWRubEJlLzlNWFg2Q0JjT1Q5OWxSWmZGc2F4QXcyZ2cyQ3NDa04zd3NSYllOQWVtTFVQQmkzQ0ZCUEdISUVoRjJCS2hIWVZCckNqVWloL0FaK3ZwQldZNVlEdVBqb0pFMkVRbmFMVEFxZ2I5Q2pNVmtUck1iUjJRRXFkemtEYUJHUmRwTFBvbTRTa00zU08zZ0YzTGNKTjU5R2FCcmNqOURoYUtuMFZSdDhCZWtsMW9VTjFvVVAxQktpZUJOVWhtdmdmMnFQU1V5cDk5WmRvTDgycTlEVm9pdjlQaWVzNzVYOG85Tit3VzZHbkJZeUMvd05RU3dNRUZBQUFDQWdBVFpyYVR0M2RzMUZSQVFBQUxBSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE1TG1Oc1lYTnpsVkhKU2dOQkVIMGRZeEpqM0RVcXVYb3dpazVBRVZ3SVNqQWdSTUZFUE9UV21hbkVEcFB1MkQzajhsbWVCQTkrZ0I4bFZrWlBJcUlOVmErVzE2K3I2TGYzbDFjQXUxakpZd3lMV1N4bFVSVElIQ210b3FwQWVyMWR2bWFvbVlBRVpocEswMFU4NkpDOWtwMlFLL01ONDh2d1dsbzF5citLNmVoR09ZSENtZFprYTZGMGpqamRhaWpqRFVNWmRZMGQ3SGtCRFl6bmZLOUp0ekc1cUc3c1pXd2lHU21qM2RyK29VRHFvU0lnMmdJVExkWFRNb290U3g4M2pPMTU5OVRaNlh1eW83eXJ4eUUxcVV1V3RFOUgzNXFCWkQwbU9POGtDQ3c1ZDFobDNYekx4TmFudWhxTnV2clQ4OXQ5ZVNkNTIxUHRoOFlwM1R1bjZNWUVXU3dYa01hNHdPWS9OaEVvL1RLeVFQblBXcWdneFo4ME9vS05KMkhNY0hUQTlSUmpacVAwRFBIRVVRclpVWjd3NnNpeEwzNHlNSUhKUkNHREFxYTRuOFowd3AvQmJJSnptRSswRjlqbkV4UEpUU0QzQVZCTEF3UVVBQUFJQ0FCTm10cE9FL1NieG1FQkFBQldBZ0FBUndBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa1UzUnZjbVZrUkdGMFlVTm9ZVzVuWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenBWRzVUZ014RUgwT1IwSUk5OTBnZ1NpQUFoY2dHaEFTQkpDUVZpQVJsTjdaSFRhT3ZIYmtkY0wvOEFkVVNCUjhBQitGbUYzUzBFQkI0VGVIbjJmZWpEOCszOTRCSEdHampqRXNWN0ZheFpyQW1IR3B3RUhrZkNxZnFIUFlrMzN2Z291ZGtiSHpKRE1LWFpmazBsUGVkelluR2JuMFJLRG1UTkpXWmtBQ3ExRlBEWlhNVk9qS0M1M2UyRUFwK1lKajZXbkVtVHpWVm9jemJyZTcxeFlZYjdxRXMzT1J0blE3eURya0gxVEhjR1l4Y3JFeWJlVjFFWStTNDZHcmM0SE5WbUJCeWFVS3F0bFZOcVhrYWtnMjNJK0VDVFJ1ckNYZk5DclBpZm5OU0R2Wk55bzhPcDhkeTRReUovTll0blRXTjFUVVVpbnQvRjZUaDZpMzNNREhkSzFMZVQ4ZUh4UnpOekNGZWhYckF1Zi9iaWN3WDY3UzhKVzg2L1FvRGdMYmY1ZkZGaXI4cCtERDI4SUVlN3h5VkV0YkcxbFJDR1djNWtpV01UQ3gvd3J4d2s0RkRjYkpNdm1NR2NiR053R3pXQ2p2RjB0Y3dqemJva3dGSzVqRDFCZFFTd01FRkFBQUNBZ0FUWnJhVGhDZnpNOVJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTBMbU5zWVhOemxWSEpTZ05CRUgwZFl6YWowYWhSeWRXREN6b0Jnd2NUZ2hvVWhDaTQ0TUZiWjZhTUhTYmRzWHZHNWJNOENSNzhBRDlLckl5ZVJFUWJxbDR0cjE5WDBXL3ZMNjhBNmxnc1lBeHpXY3huVVJISU5KVldVVXNndlhLMWVzblFOZ0VKbERwSzAwazg2Sks5a04yUUsrV084V1Y0S2EwYTVWL0ZkSFNqbkVEeFNHdXk3VkE2UjV4dWRKVHhocUdNcm8wZGJIc0JEWXpuZk8rTWJtTnkwYUd4cDdHSlpLU01kc3YxaGtEcW9TWWdyZ1R5NTZxblpSUmJsdDd0R052ejdxbTcxZmRrVjNrWGowTTZvMnV5cEgxcWZtc0drdldZNEx5OUlMRGtYS1BGdW9WekUxdWZEdFZvMUtXZm50L3N5enZKMng1b1B6Uk82ZDR4UlRjbXlHS2hpRFRHQmRiL3NZbEE5WmVSQlZiL3JJVWFVdnhKb3lQWWVCTEdERWM3WEU4eFp0YXF6eEJQSEtXUUhlVUpieDg1OXBWUEJ2S1lTQlF5S0dLUysybE1KZndTcGhPY1FUblJubVZmU0V3a040SGNCMUJMQXdRVUFBQUlDQUJObXRwT2NadEprTklEQUFBN0NRQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjNjFWNzNQYlJCQjlGOXRSN2FpdENVa0twYlNsTmFuai9MaVV0SVdTRUhBZHB3MVZISWlOUzRBWlJwR3Vzb0lzR2VtY3BIOE1YNW5oVzJGb1MyR0c2V2YrS0lZOTJjUzBNY1FaYW8xUDB0N3V1N2Q3ZTA5Ly9QbnI3d0N1NGFzMFhzRkNCcU80bHNaVlhNL1FjRVBEdXhta2xDV0Y5ekxJNGVZSTNzZWlocVVSWlBDQmhtVTE4NkVhUHRKUXpCREVMUTBsRFNzYXlnekRzdUZHdVhtR25PRUd2T1daOG40UU5tOXdXelFESGxtODZqWmJucWpLSURRZHNVaitTNjd2eW1XR0svbEJBcWJxRE1sU1lBdUcwNGJyaTBxN3VTM0Ntcm50a1dYVUNDelRxNXVocTk2N3hxUWl4S0N2K2I0SVM1NFpSWUplSndkWUxIZWQrS1hNVnN0N3dIQmVHWVc5WWtxejFEQjlSOWpsWGVITFRSRzFBaitpZGFLOEVZUU8zeFBiQ3p1OEZRWXlzQUtQV3hURW0wSTJBanZpWWRlWkc0R3pPRFVJZy85ZWxPZ2x2TUJobUR2ZTBnd2pRdUhVVGE4dElnMjNxWFRsbnVHZUt4dUdnaTM4QTFidTgxTGd5OUMwWk82d0wwR2VsQTlhd3U3Vm8vUlM4cHZNR3p2bXJzazltdVViMnp2Q2tsUzVReWFHVEhuZkVpM3BVcHlHT3d6cHF1djRwbXlIUk9YN3d3R0tYQ2dvR1hkWDdQUDdiZCtLUS9scTkybnBlQlY5Q2JrdXF5U3FRVHUweEtvYmQvTno0WE1xQldyNnNtOTVRZVQ2em5yTVE4T2Fqbzl4VjhjWXhuVk13TkN4am9xT0RYekNVUHpmdEhTOGhVczZQc1dtaHFxT0dqNWpPTmNyamJudGNwdEMxZDVIdkVhampqcnVNWXpGRlcrYXNzRnZ1YzZhTDRValFoMmZZMHZIRjloaW1EbE9mWFdjeDBXU2xFSE9MRVAyeGQxbXVIREVkbXY0a2lFL2FMY3p2TnBiNHFEdkdDNGR6WStFSk9wYjhGVXYyT3NJbGpHSWtIeExiQ1F2eXdiMWloUmhSMDE2R2Y2TnBoUWlyelR6VExXMnNWbGVXU25XaXFVN3hjcnQ4c3JYNVhxNVVxUFNHUCsyblRFdjFaV21aWW1JUkgyZVpQMjdnV1Q2Q016akt1VXhaQ2pyQ0xubTIySmYySjBwT2tqNXJtSzBwZXR4dzQxVVVxZWV0MUNkS0pCaFBML1dWMTVPMEd5TVI2MmQ3KzhSZUhiWFk4TG8xLzNLeHhkN1haL3h2am5oSW4xT1IwRU5CcGJOcWpOTkgrb0UvU2R3aHF5djBkTXlodWdDTW9YcFIyQ0ZKeGo2a2Q2RzhEcU53K1FET0RnYlI4UmVlQU52QXZHVFFtTjAwVm5xWXYxQTJFbTZyeGQrQnZzSmllbGZrRnovRGFtdEp4aXV6QksrTmp2ekdDY1NUNUVld2pOa25tS0UwVjEvaEpQeFJQTHd4S25aaHdkMHpoSWhZQWM2dnFIRlBiSTE4UTU4M0VVUVV5eDBGaitndUs3RWhxanBLT0l5SmdsbEREZHhCWGtrc2tXaVBVVVdSWHVoVzRKMFlmb1pUajlHOW1IZkN1anhjN29MWDZCL2tpelROTTdFL3JPWWkrOGM4L0hjVlNKM0xxYWRvRjNvL0ZKa3ZVQVlPYXppYmFUL0FsQkxBd1FVQUFBSUNBQk5tdHBPQ0swYVRFY0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QTlPS05BUnlqS1dCSUtMOHAxZm5sK3Q1WGJYWE1mS1lqUElaWDc1SVpra2hvT0pJTzhnYVRLNUI1YjhTK3YxUkJKTlc0Wkd0a1RMYzk0UWRRU3dNRUZBQUFDQWdBVFpyYVRoeit6dHlnQVFBQTV3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjNVZTUVU4VU1SVCt1Z3c3N0RyS2lvZ2lhanh3MkFXelJUUmNJSHRnSTRsbU5SSElYamgxWng1RHlXeTd0aDBOUDRzRE1mSGdEL0JIR2QrTUhvd3hCdEswNzczMisxNi9yK24zSDErL0FYaUZweTNNWWFXTkNBOWlQSXl4S3RBTVo5cXZid2xzanJTVnMwS0ZVK3VtT3pLanFaVStsWWYwc1NRZkRxejdVTnFnZ3JiRzd6SnRUeHNkQmdMOTdnMTR2YkZBTkxRWkNTeU90S0gzNVhSQzdsaE5DdDVaR3RsVUZXUGxkRlgvM293cWVRTEpHMlBJRFF2bFBYSFp2LzZkNjl0YkxMZDFwSE9qUXVtNDVkdVJkYm44VEpPWDUxSk50RHkrbU5FaG5aSWprOUxlWDRlWjRqNE04REluVnFBQ1pYTC9JcEIvc2JNNzRNYnRJMXU2bEE1MEpYYjFYd0w2NStxVFlyK3ZUVnBZcjAzK2pzS1p6V0k4U3JDR3h3bm0wVXdRNDRuQTg1dTRFbGo3ancrQjNyV2JDU3prRktxYWFkM3V5WDd2ajBlWU9SdHNhZ3VaV2tkTW56SnFxSXFDdmM5MWUyTTg0eDhWOGVjU25VN2xwTXA0eGxqZzJPSnNnQVlQb0wyeGVRV3g4UVdOUzY0YWFQUGFyTEVXdDNoZCtZVkNnanRBbmMzWDV4RVdhM3dIZCt1NGhIc2NJeXpqUG03WE9CWlNNL0FUVUVzREJCUUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpjdVkyeGhjM090Vmx0ejIwUVUvamF4bzloUlc5TmNXa0lnWEVKd25JdENBZzJRRXNoRkRnYkZJWmU2bEVLTExHOXNCVmx5cEhXYVB2UEdJODlNbjNqaHJUQ2twVEREOUprL3dneDMrQUVNWjJVVDA4U2R4ak94ck5YdStjNStlODdSMmJQNjhaL3ZmZ0R3RXNveG5NT3JjWnpIYXpITVlEWk96VVVGcjhjUmxaSW81dUpJNFkwdXZJbDVCUXRkaUdOUndaSkVkSW1rRlN6THdWdXl5U2g0V3o3ZmtZMmhZQ1ZPNUZrRnF3cmVWYkRHMENGS2RqQTB5VEJxMko1V2NVeXg1Zm5sQzFxQmx6MHRzTFIxdmxQbGdVaDcvbHJWRTZhd1BUZVlwV2tYYmRjV2N3d1R5UmJtamVRWUlvdGVnVE9jTVd5WFo2dmxQUGMzemJ4RGtyT0daNWxPenZSdE9hNExJOUk4QmpYanV0eGZkTXdnNERTY09QNmFRMU16Wkc3VXJGU2Ntd3o5RXVEcjNPTDJMaS9vdTl3VjZ6eW9rQjZ0dFpzMFBMK28zZUQ1NlcydDRudkNzenhIc3p5ZmEyVXVTbDRoMFB5NnNtWjR4ZG1SRnF4NCtMcGtYYnZqRmFWVExhM08wTVVsVDg1MGFEa0ZHeFJCdlNHNGJJdVNJV2xULzZNVmU5cWk1d3JmdE1UUVVWMmlQQ1Z1Vm5paEVaTDBTYms0bkRTMnpWMVRjMHkzcUszbXQ3a2xLSDVIUkF4eGZjL2lsWkJSd1NaRGJNTXV1cWFvK21UTmwwY25TUHQ4VHY3UW9udmFWdFcxd3FsYXV0NjcyRnBRVDhiZE9lbkhobGYxTFo2MlpSWS8zb3hoUWpwREcwRjNMY2NMYkxlNEVscWs0SktLSEM2cjZNY1RLZ2J3bm9vcmVGL0ZWWHpBc0hRU0JxcDRBVWtWSCtLYWd1c3FQZ0taTWRDSWs1bTN0WUpKTkpRTGdiWkpyWW84TElaRUkvd2J3aWVMVlJSQTRCYXVNYlJkWFZCUnhMS0tFcFlaZWtMZHNpbEsyb0pkekxpQ0Y3bXZ3c2EyaW85Qk1SbHI1Y1dvR01Jd3pXbGwyejlnYnkxZEdBWWZrUzhLSElia2NYY01RM2RqaVlQRVpSZzV0cDFVa25hT3ZLZTA0OTJvbFQvak9DVXBaTlYwVWFKa0U5eXYxYVdHay8reHlVS1RsQlc0ZSszUzZxYStyaS9xbVp5K2RGM1A2Vm5hYUlQR3d6SWd0RW1tdEdsWlBBaUdwaWZwdVBpaWxici9DT3BXeTI0TEJTMVI1Q0xqRnZnZUw5UWdxcExKZXVHcEN0dlJERHVRdnAxK1VFS2hvb2tNdmNsTTB5clZTV2pJUjRtZWJLNFJWT25Jc2JrdkQ3YkQrNGJ3Ym1MSWV1NGgyNkwrMWs2bXdLQ0VTU0Y3blhZUVZIbGhub3pwTTVydEtmbGFxM25LMnQ2bVljSFRkT0NmQjlVZ3NFUkMxaFQ2eUdpbmV3QlBrdlFwNnMyaGpTNGduaHJkQjB2ZFJkdFhOR3JESUxVZHBBUDhSQ3hBWDAwTHorQTVJT3hKTmtZWGJjNGFGK3NnN2doaHQxTGZnSDJOOXRGdkVWbjVIdEVyZDlHUkhTZCtaWHpzRGpyYjd5SFdodnVJMzBNWG82ZTZqMU1TT0gwWU9FUC9mU1JDTE5JVWV5ekVvb2V3cy92b0RvR09veXYxak44KzhHOFlNV3AvaG9wZjBJTmZLVXEvWVFxL0k0cy9zSTAvOFFuK3d1ZjRPL1EvVmZQc3dQOWJzb3lTM3lvK3d3akdpTEVIbjJJY0UyaFB6Rk5NTkpMSStFN1g0eHRMamQ1SDd4MzAzVzRhWGpYc3grcjBrM1JIU1BJaXRWT2gvalI5Rzhybnk3Z1FZak40QmM5U3I1OUNmZzYxWDVTa3p4TkhDdXNZUmV4ZlVFc0RCQlFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBRTJhMms2Nm9rUWVrd0VBQUxRQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1EwTG1Oc1lYTnpqVkpMYnhNeEVQNmNiTE5OV0dnb1VCNEZWRlZSU1ZvSkkvcTR0TW9sQWdrVU9EUnQ3czd1ZE92S3NTT3ZBK3JQNnFHcXhLRS9nQjlWZGJMMEFCd2dzand2ZnpQempUVS9iMzVjQTlqQjZ6cXFXR2tnd3RNWXoySThGNmlGVTEyMDNnbTArdHJKaVZIaHhQbnhuc3hvN0dTUnlvRWVUd3dOZ3ZNcXAzM0dIMmlyUTFmZ1RYdWVoTTVRSU9xNWpBU1crdHJTMStsNFJQNUlqUXhIbHZzdVZXYW92Sjc1ZDhGb1JrZ2crV1F0K1o1UlJVSHNic3pSckxYRC9Pb0RuVnNWcHA1TGZlNDduOHZ2Tk5vK2sycWs1ZEg1aEE3cGhEelpsQTcrZXN4VVVJRUJoY3lKTzZ0QW1UeldOcnpmM2R2dmN1SEd3RTE5U2g5MXlmeVB4bS9QMURmRkEzNndxWEdGdHZrWENxY3VpL0Vpd1NwZUpsaEFMVUdNVi96TDg0d2hzUG9QNGdMci95OGlVTTBwOEwrMU83L05PZkV1dU5RWm1UcFA4cEFUQS9XVU1UeGV0ZDBaWW8zWEkrSk5FYzNtalBQTTRodGprWFdkclM0cWZJREc1dFlseE9ZVktoZnNWZEJnV1N1eHg3akhjdVVYQ2drZUFLVzFVTDVIV0NyeFRUd3M5VEllc1k3d0dFOXd2OFF4a1RJRHQxQkxBd1FVQUFBSUNBQk5tdHBPQVRUMXVwY0JBQUM3QWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNeTVqYkdGemM0MVNRVTlUUVJEK3RqejZiSDFLUlVBRk1jWTAybUxpR2xBdWtGNHFKSkRLZ1dMdjIvZUd4NUx0YnJOdkMvRm5jU0FtSHZnQi9pamo5TWxCUEdpejJaMlozVzltdm04elAzNSt2d0h3QVM5cW1NTktIUkdleEhnYTQ1bEFOWnpwb3ZsZW9OblRUbzZOQ3FmT2o3WmxSaU1uaTFUMjlXaHNxQitjVnpudE1INVhXeDA2QW05YXN5UzBCd0pSMTJVa3NORFRsbzRtb3lINUV6VTBmTFBZYzZreUErWDFOTDY5akthRUJKSURhOGwzalNvSzR2RDFETTJhVzh5djF0ZTVWV0hpdWRSaHovbGNYdEp3NjF5cW9aWW5YOGQwVEtma3lhYTArOWRqcG9JS0RDaGtUdHhaQmNya0YyM0Q1c2Z0blE0WHJ2ZmR4S2UwcjB2bWR4cS9PMWNYaWdYdTJkUzRRdHY4TTRVemw4VllUYkNHNXdubVVVMFFZNTEvZVJZWkFtdi9JQzd3NnY5Rm1HL0JIbVdmV0JaL1g2djloOXl4ZDhHbHpzaVVFZktZOHdOMWxUR3NjcTdWSHVBbFQwbkVBeU1halNuMXFjYzd4ajIyTmZZNnFQQUM2aHR2cnlFMnZxRnl4VkVGZFQ2ckpYWWY5L2xjK1kxQ2dvZEE2YzJYN3hFV1Nud0RqMHE3aU1kc0l5eGhHUTlLSEJNcE0vQUxVRXNEQkJRQUFBZ0lBRTJhMms2ZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZFWldOc2FXNWxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM09sVWsxckZFRVFmYjFKZGpicmFyNDBKbjRjQkE4bWgvUWh3WXNpdUlrTEM0T1NqZVFpQ0wwemxkbGVlcnBudTN2aTcvSVU4T0FQOEVlSk5aTUZMd3FDbDNwZEg2L3FWZEUvZm43N0R1QUVUL3RZd1Y2Q1J3a2VDNndZVndnY3BjNFg4Z3ROaitleThpNjZ6Qm1aT1UreXBEaHplWkNlUXVWc0lKbTY0cFZBTDlSVlpUUjVnZTEwcnE2Vk5Nb1c4aUo2Ylp2OG1yOWFqSE9CenFlaFFMS29YYVRHN2VrUWFzcmZSb0hkVzFxcDRrd09kVEcya1FyeVRPMisxbGJITnl6dHhjR2x3T3FweTBsZ0k5V1czdGZsbFB4SE5UWFV6SFdaTXBmSzY4WmZCbGZqVEFlQnZjbm8vSXd5dzV6ODNUWFpPRm5LRnhpTXJTVi9hbFFJeEpWbnFYYXlNaXBlT1YrK2xEbVZUb1pNVG1oUlU0Z2o1ODladTRxYXljLy8xcFJGOXk5YzdUTWE2VWJFL3AvWVI4MjZBOXpGdlFSUEJJYi9QMVpnOC9mbFAwem5sUEZaRC82NUw1Nmh3ejhCV0FQZmpTMFl1MGhhN0dHOXhmNFM3MkRRb21nV1lMdkJubXg5NWgvZVFIemxSd2ViYkx0TlVIekdGcjhIdHdYWXhvTTJ2OXZhaDdqUDJPZGNCL3ZZd2ZvdlVFc0RCQlFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qVXVZMnhoYzNPVlV0Rk9GREVVUFYyR0hYWWRaVVZCRVRVK0VMTUxabXNFZllGczFJMGtKcXVKUVBhOU8zTlpTbWJicGUxQStDckNBekh4d1Evd280eDNSaDZNTVFiU3RQZmU5dHpUYzVyKytQbnRPNEJOUEcxZ0JrdE5SSGdRNDJHTVpZRjZPTlIrOWFYQStrQmJPYzFWT0xCdThrWm1OTEhTcDNLWGpndnlZY2U2TDRVTkttaHIvQmEzYld1alEwK2cyNzVCWDJjb0VQVnRSZ0x6QTIzb2N6RVprZHRYbzV4M0ZnWTJWZmxRT1YzV1Y1dFJLVThnK1dnTXVYNnV2Q2N1dTllL2MvWFZhNWJiMk5Oam8wTGhtUEx0d0xxeFBLWFJ4cEZVSXkzM3o2YTBTd2ZreUtTMC9kZGhwcGlIQVY2K3l6SkgzbS8xbUs2NVp3dVgwbzR1SlM3LzY5cnVrVHBSN1BLRFNYUHJ0Umwvb25Cb3N4aVBFcXpnY1lKWjFCUEVlQ0x3NGlaZUJGYitvMTZnYzIweUZqZW04TDQ0STNkbFRlQjV1L09ILzZtendhWTJsNmwxeEJ3VEc2aXY4cHdmWUtiZEdlSVpmNmFJLzVWb3RVbzdaY1l6eGh6SEJtYzkxSGdBemJYMVM0aTFyNmhkY0ZWRGs5ZDZoVDNITFY2WGZxT1E0QTVRWmJQVmVZVDVDdC9DM1NvdTRCN0hDUGV4aU5zVmpvVlVIZmdGVUVzREJCUUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTmk1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOaGd1RUEwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0FuWktrSVpxSGpienNNVWcxNVJLdWhhRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TTZEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpBbzl1VkVDUmNaWXJ6MnRKbndSeHlkejdnWVNUNVlMckNIWXpTb2ZHeCtPd3dFMGRDQTVSTWtBY0pod050TGgvYXMzbWdSY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUUyYTJrN0tJeXBtUGdNQUFKTUhBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRZdVkyeGhjM085VmV0T0UwRVUvcVlVVnNxS1ZSSHZDb2phQzdJb2lwZFdWQ3JWa25yRmtCaC82SFE3TEV1Mk8zVjNGdlZGZkFJZlFCUHZKc2JmUHBUeHpOTEl4UXFZR05OMForYWJjNzd6blROblo3Ly8rUHdWd0ZsVXVyRWRwL1JqTklWZVdDbmtNV2JnZEEvT1lOekEyUjRZT0dkZ3dzRDVGRHB4SVVXV0Z3MWNNbEF3VUdRd2w3ZzNQQi81dG5LbHp6QlVsWUZqUFJPMThVV0wxMXlyemhWWEw1b2l0TW90bXdKRGwxcHd3K0V4aG56VmxWYlQ0MnBlQm8wSnF5NGEwZ3B0Njc1NEdvbFFsV1Z3TDVMa1QxNmhkaXU2dnFzbUdlNW0vc0p2YzBIWk9ZWmtTZFlGdzQ2cTY0dmJVYU1tZ2dlODVoR3lxeXB0N3MzeHdOWHJGcGpVQ1ZEdUZkOFhRY25qWVNob09icDFWY09uSnlpaEpERjdETWN6MlZVaVZkVDBTSjBqaUpvclViY2VhR0NjekkxQWhKR25LRks2dXNpWHVCVXAxN09xYnFob3MzK3RUc3F3cFhWc25XM3hqd1hSVG9WSjRrcE5QN2RGTXhacTRESkQ5NnpyK0Z4RkFkR0pyWWd0THNkc2NMVmdUYmxPeFZmQ0VVRmhHZlc0NzFpektuQjlwOURlVG12b296Z3I1bmRxaThMV2FiNzhIVnlWbnkxOU93b0M0U3VyUktYVkJTaitCN1Z4eldabEZOaWk3T3FhNzI5MzVxUGFtMXBzMnJjOUdSTGZMYUVXWk4zQXBJa3J1R3BpRjNhYlNHT25pVDVjTXpHRkVzUGdwdW9OWERjeGpUTERvWTBPMXNRTm5LQ3l0a3VCR21wOXJsckRUUk9IY0poaDVHL2FlZzNYOGdreEhON3dpQmgycjdqOGFqMkc3SmJqMHQzZ0NIVy9mSThoazNrMHRicERtNEZVMHBZNmNDREl1U0dWMElIcHlEb3krczFQY2RzV0lWMUhZM1FoUGY3SE44dnY3Mm52V29SVWtIS0dQWmxLMjM3ZlJydHozSXVvU0JjemYrcjlqWkhzSEFibzB1NEY5UjRTNmJSdU1ZQkc2amY2QkhUUXZ3OTdhTGVmWmlVa1ltUkhMdjhPTERmeURvbmNCM1M4SVNpQnZmVHNJa1BnQ2ZiUnM1OHdNc1YrSEFUaW1hWms5S08rSVJwTitJbzh0TlZNN2kzeHZVWGlJNUxWTCtoOG1PLzRoSzRFdnNINGhHMk14dTU4Y2gyU3luZXV0L21BbnRleGFLM2xBSEVETmt6VUtiTEFNT1l4QVFjVldxL29tMm5wTXpHSkl6aEs2Z2JpRldzaGd6UWJJaVJKNHpIaTBKa2VUMStqSEU3UVRPZGd4VGtCbmJuM01GKzNMWVc1Yk5BS3RVS1hiQkdlUkNZZXM4akZlM21Na0h3Z1JWYmI0K0xoSjFCTEF3UVVBQUFJQ0FCTm10cE9tMWZIbUVJQkFBQWFBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM09WVVV0TEF6RVFudlMxYlYydDFnZUlWdzlXMFFnVkVWcDZLUmFFVmJDdHZhZTcwNXF5VFdxU1ZmeFpuZ1FQL2dCL2xEaTdlaElSSFpqWE56TmZac2piKzhzckFKekFWaFh5VVBkZzNZTU5CcVcyVk5KMUdPVDNHaU1HaGE2T2tFRXRrQXF2a3ZrWXpWQ01ZMExxZ1E1RlBCSkdwdmtYV0hDMzBqTHdMNVJDMDQyRnRVanBZU0ExWDhUQ1RiU1puL0lJNTVyYmtQZnhMa0hyZXRwY0o5b0pKN1d5dTgwV2c4cEFUcFZ3aVNIR2JxRE5sRC9ndURuallpejU4SEdCZlp5Z1FSVmkrMXN4RWtSRERaYmZ1TW5ad0JtcHBxME9NVllIT2pFaDltUzY1UFpQRHgvTnhMMmdPODlWR0d0TGM1Zm9iblhrd2FZUEJTZ3lPUGpIRFF4MmZ0bWFRZVBQWEhBTU9mcWRWQmdwYlVLK1JCRW5ueUxGL1dkZ1R4VGt3Q05ieXNBT2xNbjZudzFRZ2FWczFNKzZsbUVsOHpWWXpkQTFzdFZNR2FHcGxEOEFVRXNEQkJRQUFBZ0lBQW1aMms2RjE4azEwQUlBQUlnSkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJKMVdTMi9iTUF5KzUxZG93VTRGTENWTk1SU0Y2MTY2QWgzYWJVQzJZVmRWWmx4bDFtT1NuTFFZOXQ4blM0bnJKTGFiTHJlUUg4bVBMOUhwMVpNbzBRcU01VXBlanFkNE1rWWdtY3E1TEM3SDM3L2RKT2ZqcTJ5VWFxT1d3Qnp5YUdrdng0L082UXRDQkYyQnhGUlQ5Z2hZbVlKOC9YSlB6dkRFZXhtaDdTK1lYRHhaM3BpdDEydThuZ1dEMDhsa1NuN2UzODI5QjBFVExxMmpra0hiM1BJTEc3UjNpbEVYYUw0YUh2VWhubXdlaFVuQVlmOS9uSVZncVZBNWxEOWlKYktnVGNtT2JCUnhoVkdWdnMwenBnU21ncFpPWVYxU3QxQkdmRWpKVmh1eDFEaStvTXg1UVE1Q0pWVHJ4QW92VFppU3puaE5TbHFZYUxUcFJqYXRHYXgyZy9zK2FQQUdZTE9tUkduTTB2UFJ2QVNEcmFvTUEyOStucEp1VmErcG82WUExMm02VVVVYXBNMGppbkxRSUhNL083dmNHdkh6aTNDbmpMNHJlQTBQcytWZTdScGdxejVNR1Rnc1dJTmNOYzJiNFdtcmRBMkE3TE5wU1ZxcFBGUzhiUGxPZFZrVmZqTDNva1hwcnZBZ3M4M294VnB1L1BRa3VwOXNITk1sTlVtMDYwOThKM21mT2o3dFNMNEIrc2xiOEtJeVlaY085UnNhN0pHdm9Gc2JFWGwrWHhPOEJzc00xMDZaekptcTdzNmhvdCtMb0pJdndMcCt5RGJZTlN4b1ZicGJvVXNRSUYxZy85SHZVTjIzSnZJZzZ0Z1ljdzJNTHpnYkRORUo2aytVdko1cFU0emorTzdtbUZ4VEI5bjdQM0hRd2dCang0WDNSb1grbTVJdTlCRnNCNm5VQTlrekppa1ptREwvZW5Tc3puSDdOUFJTQkhCclJ3STJpV3YwcGhVNnc2ZnRwemQ5bHlTSVVTbVZRNVV1RE0wQk9ZWHFFekZERDhCb1pRRnhod3o4cnJnQml6N1JGVVhUS1VxUy8xdy8vMmo4b2dWOHBnSXkzam92dUQ0aTJESmZ3UmFpMjBkODZ2MFdPaTVqTEd1WWJ5eVhaT241a1pRY0l2bzhsVHpuN25rZThEZitHZ3hOZXU1THdQeldQNy9FOHpVSnB2N2xlOUgyZStDU2xWWCs2Z0pzWU5uSkNUbnhoNjFNeVZZeU1OakR2dXVhSEpIckc2ZDdLN0hibTdPNUw2TndSdXZQcW16MEQxQkxBUUlVQXhRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBQUFBQUFBQUFBQUNrZ1FBQUFBQk5SVlJCTFVsT1JpOU5RVTVKUmtWVFZDNU5SbEJMQVFJVUF3b0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBRUFEdFFjNEFBQUJOUlZSQkxVbE9SaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUJBQTdVSDFBQUFBYVc4dlVFc0JBaFFEQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUFBQUFBQUFBQVFBTzFCRmdFQUFHbHZMM0JzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUJBQTdVRkJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUJVQUFBQUFBQUFBQUFBUUFPMUJjUUVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFFQUR0UWFRQkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3RUNGQU1LQUFBSUFBQk9tdHBPQUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFCQUE3VUhSQVFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlVFc0JBaFFEQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQVFBTzFCRXdJQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDFCTEFRSVVBeFFBQUFnSUFFMmEyazdZODZmQW9nRUFBT2dDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVzBDQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWOEVBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1VvR0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbXBzUzZzMEFnQUFHZ1FBQUNRQUFBQUFBQUFBQUFBQUFLU0Iyd2NBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSkdVVk4wWVhSMWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVkVLQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1B3cUJOb0FFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dVUU1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1RRT0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnU2NRQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVPRWdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNFVXS2tCRVJ3QUFFbHBBQUF2QUFBQUFBQUFBQUFBQUFDa2dhVVRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUU13QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tmk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2dWazBBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazV5TGMzOVJ3RUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVlkyQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25BdDdZUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dlMDNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTFMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVJM096NUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCZ2prQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaStNdk9CUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0JHVHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNmhaeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2diSThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG9uWUFyZ2tEZ0FBalRNQUFDZ0FBQUFBQUFBQUFBQUFBS1NCUno0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJR3hUQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFBQUFBQUFBQUFBQUtTQlNrNEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG4yQ3F2dWtBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCT0ZBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaFE1RkZmYUFBQUEwQUVBQUJFQUFBQUFBQUFBQUFBQUFLU0JMRklBQUZOcGJYQnNaVk4wYjNKaFoyVXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUckpmRzNWWEF3QUFHQWdBQURJQUFBQUFBQUFBQUFBQUFLU0JOVk1BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtZ3lJYWRJQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQjNGWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVSOVh2QkhBUUFBSVFJQUFERUFBQUFBQUFBQUFBQUFBS1NCZEZnQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFBQUFBQUFBQUFBQXBJRUtXZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0VwTWErS0lEQUFCcUVBQUFHQUFBQUFBQUFBQUFBQUFBcElIOFd3QUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5c1VFc0JBaFFERkFBQUNBZ0FUWnJhVHBZQUFXRy9FQUFBRXkwQUFCOEFBQUFBQUFBQUFBQUFBS1NCMUY4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMVJsYzNRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE8zZDJ6VVZFQkFBQXNBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSFFjQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ1hCeUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0UW44elBVUUVBQUN3Q0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbkdiU1pEU0F3QUFPd2tBQUNvQUFBQUFBQUFBQUFBQUFLU0IxblVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNElyUnBNUndBQUFFd0FBQUJLQUFBQUFBQUFBQUFBQUFDa2dmQjVBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOXdiMjB1Y0hKdmNHVnlkR2xsYzFCTEFRSVVBeFFBQUFnSUFFMmEyazRjL3M3Y29BRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWjk2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dZOThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2YVM0M0ptUUVBQU4wQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1MyQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnUmFEQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJSHhoQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRwMzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQjBJWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUFBQUFBQUFBQUFBS1NCVDRzQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VVUmxZMnhwYm1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VXTkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazduZkFaY1JnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVEdQQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRzb2pLbVkrQXdBQWt3Y0FBRElBQUFBQUFBQUFBQUFBQUtTQnhwQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHB0WHg1aENBUUFBR2dJQUFERUFBQUFBQUFBQUFBQUFBS1NCVkpRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FBSm1kcE9oZGZKTmRBQ0FBQ0lDUUFBUXdBQUFBQUFBQUFBQUFBQXBJSGxsUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJGQkxCUVlBQUFBQU5nQTJBQ2tUQUFBV21RQUFBQUE9XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOmZhbHNlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJkZW1vLWFwcC1zbWFydC1jb250cmFjdC0xLjEuamFyXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ0MTE3fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE4MjM3NDc2MX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlBPUmV2aWV3IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUE9SZXZpZXdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVGVtcGxhdGUgZmlsZSBmb3IgZW1haWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHdvcmtmbG93IHNlcnZpY2UgZm9yIFB1cmNoYXNlT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4MjYsXCJyZXZpc2lvbklkXCI6XCJjOGI3ODVjNTgzMWVhNjI4ZDkwNzA1NzA4MjBjMzRkNFwiLFwiaXRlbUJ5dGVzXCI6XCJQQ0ZrYjJOMGVYQmxJR2gwYld3K0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWlCNGJXeHVjenAyUFNKMWNtNDZjMk5vWlcxaGN5MXRhV055YjNOdlpuUXRZMjl0T25adGJDSWdlRzFzYm5NNmJ6MGlkWEp1T25OamFHVnRZWE10YldsamNtOXpiMlowTFdOdmJUcHZabVpwWTJVNmIyWm1hV05sSWo0S0NUeG9aV0ZrUGdvSkNUd2hMUzBnVGtGTlJUb2dNU0JEVDB4VlRVNGdMU0JDUVU1RVJVUWdMUzArQ2drSlBDRXRMVnRwWmlCbmRHVWdiWE52SURFMVhUNEtDUWs4ZUcxc1Bnb0pDUWs4YnpwUFptWnBZMlZFYjJOMWJXVnVkRk5sZEhScGJtZHpQZ29KQ1FrOGJ6cEJiR3h2ZDFCT1J5OCtDZ2tKQ1R4dk9sQnBlR1ZzYzFCbGNrbHVZMmcrT1RZOEwyODZVR2w0Wld4elVHVnlTVzVqYUQ0S0NRa0pQQzl2T2s5bVptbGpaVVJ2WTNWdFpXNTBVMlYwZEdsdVozTStDZ2tKUEM5NGJXdytDZ2tKUENGYlpXNWthV1pkTFMwK0Nna0pQRzFsZEdFZ1kyaGhjbk5sZEQwaVZWUkdMVGdpUGdvSkNUeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlsZ3RWVUV0UTI5dGNHRjBhV0pzWlNJZ1kyOXVkR1Z1ZEQwaVNVVTlaV1JuWlNJK0Nna0pQRzFsZEdFZ2JtRnRaVDBpZG1sbGQzQnZjblFpSUdOdmJuUmxiblE5SW5kcFpIUm9QV1JsZG1salpTMTNhV1IwYUN3Z2FXNXBkR2xoYkMxelkyRnNaVDB4SWo0S0NRazhkR2wwYkdVK1NXNWpiMjFwYm1jZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z1VtVjJhV1YzUEM5MGFYUnNaVDRLQ1FrS0NRazhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGdvSkNRa0pjSHNLQ1FrSkNRbHRZWEpuYVc0Nk1UQndlQ0F3T3dvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1hSaFlteGxld29KQ1FrSkNXSnZjbVJsY2kxamIyeHNZWEJ6WlRwamIyeHNZWEJ6WlRzS0NRa0pDWDBLQ1FrSkNXZ3hMR2d5TEdnekxHZzBMR2cxTEdnMmV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pmUW9KQ1FrSmFXMW5MR0VnYVcxbmV3b0pDUWtKQ1dKdmNtUmxjam93T3dvSkNRa0pDV2hsYVdkb2REcGhkWFJ2T3dvSkNRa0pDVzkxZEd4cGJtVTZibTl1WlRzS0NRa0pDUWwwWlhoMExXUmxZMjl5WVhScGIyNDZibTl1WlRzS0NRa0pDWDBLQ1FrSkNXSnZaSGtzSTJKdlpIbFVZV0pzWlN3alltOWtlVU5sYkd4N0Nna0pDUWtKYUdWcFoyaDBPakV3TUNVN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSkNYZHBaSFJvT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWtqYjNWMGJHOXZheUJoZXdvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1dsdFozc0tDUWtKQ1FrdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPbUpwWTNWaWFXTTdDZ2tKQ1FsOUNna0pDUWwwWVdKc1pYc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGJITndZV05sT2pCd2REc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGNuTndZV05sT2pCd2REc0tDUWtKQ1gwS0NRa0pDUzVTWldGa1RYTm5RbTlrZVhzS0NRa0pDUWwzYVdSMGFEb3hNREFsT3dvSkNRa0pmUW9KQ1FrSkxrVjRkR1Z5Ym1Gc1EyeGhjM043Q2drSkNRa0pkMmxrZEdnNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1hBc1lTeHNhU3gwWkN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1cxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9tVjRZV04wYkhrN0Nna0pDUWw5Q2drSkNRbGhXMmh5WldaZVBYUmxiRjBzWVZ0b2NtVm1YajF6YlhOZGV3b0pDUWtKQ1dOdmJHOXlPbWx1YUdWeWFYUTdDZ2tKQ1FrSlkzVnljMjl5T21SbFptRjFiSFE3Q2drSkNRa0pkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9tNXZibVU3Q2drSkNRbDlDZ2tKQ1Fsd0xHRXNiR2tzZEdRc1ltOWtlU3gwWVdKc1pTeGliRzlqYTNGMWIzUmxld29KQ1FrSkNTMXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWw5Q2drSkNRa3VSWGgwWlhKdVlXeERiR0Z6Y3l3dVJYaDBaWEp1WVd4RGJHRnpjeUJ3TEM1RmVIUmxjbTVoYkVOc1lYTnpJSFJrTEM1RmVIUmxjbTVoYkVOc1lYTnpJR1JwZGl3dVJYaDBaWEp1WVd4RGJHRnpjeUJ6Y0dGdUxDNUZlSFJsY201aGJFTnNZWE56SUdadmJuUjdDZ2tKQ1FrSmJHbHVaUzFvWldsbmFIUTZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNXRmJlQzFoY0hCc1pTMWtZWFJoTFdSbGRHVmpkRzl5YzExN0Nna0pDUWtKWTI5c2IzSTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYUmxlSFF0WkdWamIzSmhkR2x2YmpwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxemFYcGxPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRbG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxM1pXbG5hSFE2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDV3hwYm1VdGFHVnBaMmgwT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNTBaVzF3YkdGMFpVTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNXRXViV051UW5WMGRHOXVld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRbDlDZ2tKQ1FrdWJXTnVTVzFoWjJWN0Nna0pDUWtKZG1WeWRHbGpZV3d0WVd4cFoyNDZZbTkwZEc5dE93b0pDUWtKZlFvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MGV3b0pDUWtKQ1hkdmNtUXRZbkpsWVdzNlluSmxZV3N0ZDI5eVpEc0tDUWtKQ1gwS0NRa0pDUzV0WTI1VVpYaDBRMjl1ZEdWdWRDQnBiV2Q3Q2drSkNRa0phR1ZwWjJoME9tRjFkRzhnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNXRZMjVFYVhacFpHVnlRbXh2WTJ0N0Nna0pDUWtKZEdGaWJHVXRiR0Y1YjNWME9tWnBlR1ZrSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKWW05a2VTd2pZbTlrZVZSaFlteGxld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tTW1ZeVpqSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSkkySnZaSGxEWld4c2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURFS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYVhKemRDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSFJvWlNCc1lYSm5aWE4wSUc5bUlIbHZkWElnYUdWaFpHbHVaM011Q2drSkNVQnpkSGxzWlNCb1pXRmthVzVuSURFS0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOakEyTURZd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBCY21saGJDd2dKMGhsYkhabGRHbGpZU0JPWlhWbEp5d2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk16QndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXpkSGxzWlRwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tSnZiR1E3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4bGRIUmxjaTF6Y0dGamFXNW5PaTB4Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFZV2RsQ2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01nb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdZV3hzSUhObFkyOXVaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ01nb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qSTBjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklETUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCMGFHbHlaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ013b0pDUWtxTHdvSkNRa0phRE43Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTRjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdhVzRnZVc5MWNpQmxiV0ZwYkhNdUlGUm9aWE5sSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMjFoYkd4bGMzUWdiMllnZVc5MWNpQm9aV0ZrYVc1bmN5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dOQW9KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakUyY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUhKbGFHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQlRkSGxzWlFvSkNRbEFkR2x3SUZObGRDQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUJoYm1RZ1ltOXlaR1Z5Y3lCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObVptWm1abVk3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTEwYjNBNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxXSnZkSFJ2YlRvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxYUnZjRG95Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pKd2VEc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlGUmxlSFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdkR1Y0ZEM0Z1EyaHZiM05sSUdFZ2MybDZaU0JoYm1RZ1kyOXNiM0lnZEdoaGRDQnBjeUJsWVhONUlIUnZJSEpsWVdRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZMjlzYjNJNkl6WTFOalUyTlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaExDQldaWEprWVc1aExDQlRaV2R2WlN3Z2MyRnVjeTF6WlhKcFpqc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2JHbHVhM011SUVOb2IyOXpaU0JoSUdOdmJHOXlJSFJvWVhRZ2FHVnNjSE1nZEdobGJTQnpkR0Z1WkNCdmRYUWdabkp2YlNCNWIzVnlJSFJsZUhRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElHRXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTlRZMU5qVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCSVpXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1NHVmhaR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWSVpXRmtaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPakl3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pJd2NIZzdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJSFJsZUhRdUlFTm9iMjl6WlNCaElITnBlbVVnWVc1a0lHTnZiRzl5SUhSb1lYUWdhWE1nWldGemVTQjBieUJ5WldGa0xnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZEN3amRHVnRjR3hoZEdWSVpXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pPRGxpWXpVMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlWHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxaWIzUjBiMjA2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxMGIzQTZPWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFdKdmRIUnZiVG94TW5CNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRUp2WkhrS0NRa0pRSE5sWTNScGIyNGdRbTlrZVNCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0IwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCaWIyUjVJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VTQXViV051VkdWNGRFTnZiblJsYm5RZ1lTd2pkR1Z0Y0d4aGRHVkNiMlI1SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNNE9XSmpOVFU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQkdiMjkwWlhJS0NRa0pRSE5sWTNScGIyNGdSbTl2ZEdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2psd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MWliM1IwYjIwNk9YQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVadmIzUmxjZ29KQ1FsQWMyVmpkR2x2YmlCR2IyOTBaWElnVkdWNGRBb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUdadmIzUmxjaUIwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1JtOXZkR1Z5Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFwYmkxM2FXUjBhRG8zTmpod2VDbDdDZ2tKQ1FrdWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhKN0Nna0pDUWtKZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIa3NkR0ZpYkdVc2RHUXNjQ3hoTEd4cExHSnNiMk5yY1hWdmRHVjdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT201dmJtVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGw3Q2drSkNRa0pkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FralltOWtlVU5sYkd4N0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UQndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxld29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhKMFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVWRzl3UTI5dWRHVnVkQ3d1YldOdVVtVmpRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia0p2ZEhSdmJVTnZiblJsYm5Rc0xtMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVKYldGblpVZHliM1Z3UTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2Ymt4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmxKcFoyaDBWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrTmhjSFJwYjI1TVpXWjBTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVVtbG5hSFJKYldGblpVTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia2x0WVdkbFEyRnlaRXhsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeWV3b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkhjbTkxY0VOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp6bzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYQjBhVzl1VEdWbWRFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtOaGNIUnBiMjVTYVdkb2RFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZPWEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1ZHOXdTVzFoWjJWRGIyNTBaVzUwTEM1dFkyNURZWEIwYVc5dVFteHZZMnRKYm01bGNpQXViV051UTJGd2RHbHZibFJ2Y0VOdmJuUmxiblE2YkdGemRDMWphR2xzWkNBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFEyRnlaRUp2ZEhSdmJVbHRZV2RsUTI5dWRHVnVkSHNLQ1FrSkNRbHdZV1JrYVc1bkxXSnZkSFJ2YlRvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVKYldGblpVZHliM1Z3UW14dlkydEpibTVsY25zS0NRa0pDUWx3WVdSa2FXNW5MWFJ2Y0Rvd0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUjNKdmRYQkNiRzlqYTA5MWRHVnlld29KQ1FrSkNYQmhaR1JwYm1jdGRHOXdPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0WW05MGRHOXRPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5c2RXMXVld29KQ1FrSkNYQmhaR1JwYm1jdGNtbG5hSFE2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtUR1ZtZEVsdFlXZGxRMjl1ZEdWdWRDd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUkpiV0ZuWlVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MXlhV2RvZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTndjbVYyYVdWM0xXbHRZV2RsTFhWd2JHOWhaR1Z5ZXdvSkNRa0pDV1JwYzNCc1lYazZibTl1WlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTVFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdacGNuTjBMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRElLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0J6WldOdmJtUXRiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNd29KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSFJvYVhKa0xXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3pld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFSnZlR1ZrSUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliM2hsWkNCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRnVjJVZ2NtVmpiMjF0Wlc1a0lHRWdabTl1ZENCemFYcGxJRzltSUdGMElHeGxZWE4wSURFMmNIZ3VDZ2tKQ1NvdkNna0pDUWt1YldOdVFtOTRaV1JVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrSnZlR1ZrVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCV2FYTnBZbWxzYVhSNUNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCMmFYTnBZbWxzYVhSNUlHOW1JSFJvWlNCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWmIzVWdZMkZ1SUdocFpHVWdhWFFnZEc4Z2MyRjJaU0J6Y0dGalpTNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjbnNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WkdsemNHeGhlVHB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCUWNtVm9aV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSEJ5WldobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliMlI1SUhSbGVIUWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJYWlNCeVpXTnZiVzFsYm1RZ1lTQm1iMjUwSUhOcGVtVWdiMllnWVhRZ2JHVmhjM1FnTVRad2VDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdUV0ZyWlNCMGFHVWdabTl2ZEdWeUlHTnZiblJsYm5RZ2RHVjRkQ0JzWVhKblpYSWdhVzRnYzJsNlpTQm1iM0lnWW1WMGRHVnlJSEpsWVdSaFltbHNhWFI1SUc5dUlITnRZV3hzSUhOamNtVmxibk11Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV6Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pmVHd2YzNSNWJHVStQQzlvWldGa1Bnb0pQR0p2WkhrZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUdHRZWEpuYVc0NklEQTdjR0ZrWkdsdVp6b2dNRHQzYVdSMGFEb2dNVEF3SlRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1R4alpXNTBaWEkrQ2drSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQm9aV2xuYUhROUlqRXdNQ1VpSUhkcFpIUm9QU0l4TURBbElpQnBaRDBpWW05a2VWUmhZbXhsSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDUWs4ZEhJK0Nna0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlHbGtQU0ppYjJSNVEyVnNiQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjRG9nTURzaVBnb0pDUWtKQ1R3aExTMGdRa1ZIU1U0Z1ZFVk5VRXhCVkVVZ0x5OGdMUzArQ2drSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnBaRDBpZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWm1abVpqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklESndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWNISmxhR1ZoWkdWeVEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblFpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE9IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak5qVTJOVFkxTzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yWnZiblF0YzJsNlpUb2dNVEJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxY2lCb1lYWmxJR0VnYm1WM0lHbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzTGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxTR1ZoWkdWeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU1tWXlaakk3WW05eVpHVnlMWFJ2Y0RvZ01EdGliM0prWlhJdFltOTBkRzl0T2lBd08zQmhaR1JwYm1jdGRHOXdPaUF5TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBeU1IQjRPeUkrQ2drSkNRa0pDUWtKUENFdExWdHBaaUJuZEdVZ2JYTnZJRGxkUGdvSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUluUmxiWEJzWVhSbFEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdHRZWGd0ZDJsa2RHZzZJRFl3TUhCNElDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVKYldGblpVSnNiMk5yU1c1dVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnZDJsa2RHZzlJakV3TUNVaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051U1cxaFoyVkRiMjUwWlc1MElpQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklEQndlRHR3WVdSa2FXNW5MV3hsWm5RNklEQndlRHR3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdDBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQR2x0WnlCaGJHbG5iajBpWTJWdWRHVnlJaUJoYkhROUlpSWdjM0pqUFNKb2RIUndjem92TDNCdmNuUmhiQzV3YkdGMFptOXliVFl1YVc4dmMzUmhkR2xqTDJ4dloybHVYM0JoWjJVdmNHeGhkR1p2Y20wMkwyeHZaMjh1Y0c1bklpQjNhV1IwYUQwaU1qWXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF5TmpCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdGthWE53YkdGNU9pQnBibXhwYm1VZ0lXbHRjRzl5ZEdGdWREdDJaWEowYVdOaGJDMWhiR2xuYmpvZ1ltOTBkRzl0TzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHTnNZWE56UFNKdFkyNUpiV0ZuWlNJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFFtOWtlU0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpSa1pHUmtaR08ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXhNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaVltOWtlVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0ZEc5d09pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpZDJsa2RHZzZNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaWJXRjRMWGRwWkhSb09pQXhNREFsTzIxcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkRiMjUwWlc1MElpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRJREU0Y0hnZ09YQjRPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak16TXpNek16TzJadmJuUXRjMmw2WlRvZ01UUndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCc1pXWjBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHZ3pJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME8yUnBjM0JzWVhrNklHSnNiMk5yTzIxaGNtZHBiam9nTUR0d1lXUmthVzVuT2lBd08yTnZiRzl5T2lBak5qQTJNRFl3TzJadmJuUXRabUZ0YVd4NU9pQklaV3gyWlhScFkyRTdabTl1ZEMxemFYcGxPaUF4T0hCNE8yWnZiblF0YzNSNWJHVTZJRzV2Y20xaGJEdG1iMjUwTFhkbGFXZG9kRG9nWW05c1pEdHNhVzVsTFdobGFXZG9kRG9nTVRJMUpUdHNaWFIwWlhJdGMzQmhZMmx1WnpvZ0xURndlRHNpUGtsdVltOTFibVFnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnY21WMmFXVjNQQzlvTXo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4WkdsMklITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJMmxtSUhWelpYSXVabWx5YzNST1lXMWxQejhnSmlZZ2RYTmxjaTVtYVhKemRFNWhiV1UvYUdGelgyTnZiblJsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMmxtSUhWelpYSXViR0Z6ZEU1aGJXVS9QeUFtSmlCMWMyVnlMbXhoYzNST1lXMWxQMmhoYzE5amIyNTBaVzUwUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bWFYSnpkRTVoYldWOUxBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05sYkhObFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM4amFXWStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd2paV3h6WlQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVsYldGcGJIMHNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZJMmxtUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aWNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSldXOTFJR2hoZG1VZ1lTQnVaWGNnYVc1aWIzVnVaQ0JQY21SbGNpQjBieUJ5WlhacFpYY3VJRkJzWldGelpTQThZU0JvY21WbVBTSWtlMmh5WldaOUlpQjBZWEpuWlhROUlsOWliR0Z1YXlJK2JHOW5JRzl1SUdGdVpDQmhZMk5sY0hRZ2IzSWdjbVZxWldOMExqd3ZZVDQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKSm01aWMzQTdQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0OGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdkR0ZpYkdVdGJHRjViM1YwT2lCbWFYaGxaQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3Y0dGa1pHbHVaem9nTlhCNElERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNDMTNhV1IwYURvZ01uQjRPMkp2Y21SbGNpMTBiM0F0YzNSNWJHVTZJRzV2Ym1VN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvZ0kwVkJSVUZGUVR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeHpjR0Z1UGp3dmMzQmhiajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFFvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHTnNZWE56UFNKdFkyNUVhWFpwWkdWeVFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jNklERTRjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGFISWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQnpkSGxzWlQwaVltOXlaR1Z5TFdKdmRIUnZiUzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0YkdWbWRDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRjbWxuYUhRdFkyOXNiM0k2Ym05dVpUc2dZbTl5WkdWeUxXSnZkSFJ2YlMxM2FXUjBhRG93T3lCaWIzSmtaWEl0YkdWbWRDMTNhV1IwYURvd095QmliM0prWlhJdGNtbG5hSFF0ZDJsa2RHZzZNRHNnYldGeVoybHVMWFJ2Y0Rvd095QnRZWEpuYVc0dGNtbG5hSFE2TURzZ2JXRnlaMmx1TFdKdmRIUnZiVG93T3lCdFlYSm5hVzR0YkdWbWREb3dPeUlnTHo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsUm05dmRHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBNWNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHNpUGdvSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSjBaVzF3YkdGMFpVTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdiV0Y0TFhkcFpIUm9PaUEyTURCd2VDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW1admIzUmxja052Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYXlJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTBsdWJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0YkdWbWREb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZENJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdVlXMWhiSFJ2TG1OdmJTOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdVptRmpaV0p2YjJzdVkyOXRMMkZ0WVd4MGIzUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdFptRmpaV0p2YjJzdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1YkdsdWEyVmthVzR1WTI5dEwyTnZiWEJoYm5rdllXMWhiSFJ2TFhSbFkyaHViMnh2WjJsbGN5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0OGFXMW5JSE55WXowaWFIUjBjRG92TDJOa2JpMXBiV0ZuWlhNdWJXRnBiR05vYVcxd0xtTnZiUzlwWTI5dWN5OXpiMk5wWVd3dFlteHZZMnN0ZGpJdlkyOXNiM0l0YkdsdWEyVmthVzR0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5MGQybDBkR1Z5TG1OdmJTOUJiV0ZzZEc4aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWFIzYVhSMFpYSXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREE3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1ZVc5MWRIVmlaUzVqYjIwdlkyaGhibTVsYkM5VlF6bFhXQzFxUldGRFdHMDRWRll6Y21SalEyazNZM2NpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxYbHZkWFIxWW1VdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0MFlXSnNaUzFzWVhsdmRYUTZJR1pwZUdWa0lDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdHdZV1JrYVc1bk9pQTFjSGdnTVRod2VDQXlNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ6YjJ4cFpEdGliM0prWlhJdGRHOXdMV052Ykc5eU9pQWpSVVZGUlVWRk8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSE53WVc0K1BDOXpjR0Z1UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdENna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNVGh3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9jaUJqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJSE4wZVd4bFBTSmliM0prWlhJdFltOTBkRzl0TFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxc1pXWjBMV052Ykc5eU9tNXZibVU3SUdKdmNtUmxjaTF5YVdkb2RDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRZbTkwZEc5dExYZHBaSFJvT2pBN0lHSnZjbVJsY2kxc1pXWjBMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXlhV2RvZEMxM2FXUjBhRG93T3lCdFlYSm5hVzR0ZEc5d09qQTdJRzFoY21kcGJpMXlhV2RvZERvd095QnRZWEpuYVc0dFltOTBkRzl0T2pBN0lHMWhjbWRwYmkxc1pXWjBPakE3SWlBdlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclQzVjBaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nT1hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlITjBlV3hsUFNKM2FXUjBhRG94TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTVRBd0pUdHRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUF3TzNCaFpHUnBibWN0Y21sbmFIUTZJREU0Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHdZV1JrYVc1bkxXeGxablE2SURFNGNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8zZHZjbVF0WW5KbFlXczZJR0p5WldGckxYZHZjbVE3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Wm05dWRDMXphWHBsT2lBeE1uQjRPMnhwYm1VdGFHVnBaMmgwT2lBeE5UQWxPM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdJajVRYkdWaGMyVWdaRzhnYm05MElISmxjR3g1SUhSdklIUm9hWE1nWlMxdFlXbHNMaUJVYUdVZ2MyVnVaR1Z5SUdWdFlXbHNJR0ZrWkhKbGMzTWdhWE1nYm05MElHMXZibWwwYjNKbFpDNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pSbTl5SUdGdWVTQnhkV1Z6ZEdsdmJpd2djR3hsWVhObElEeGhJR2h5WldZOUltMWhhV3gwYnpwamIyNTBZV04wUUhCc1lYUm1iM0p0Tmk1cGJ5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHQwWlhoMExXUmxZMjl5WVhScGIyNDZJSFZ1WkdWeWJHbHVaVHNpUG5ObGJtUWdkWE1nWVNCdFpYTnpZV2RsUEM5aFBpNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6ZEhKdmJtYytVR3hoZEdadmNtMGdOaUJpZVNCQmJXRnNkRzhnVkdWamFHNXZiRzluYVdWelBDOXpkSEp2Ym1jK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNjS3BKbTVpYzNBN0pIc3VibTkzUDNOMGNtbHVaeTU1ZVhsNWZTWnVZbk53TzBOdmNIbHlhV2RvZEM0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNDhMMlJwZGo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRazhMM1J5UGdvSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1R3aExTMGdMeThnUlU1RUlGUkZUVkJNUVZSRklDMHRQZ29KQ1FrOEwzUmtQZ29KQ1R3dmRISStDZ2s4TDNSaFlteGxQZ29KUEM5alpXNTBaWEkrQ2p3dlltOWtlVDRLUEM5b2RHMXNQZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjUxMjY2fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU5ODgyNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1MDcsXCJyZXZpc2lvbklkXCI6XCJkMWZhY2FkMDlkMWI2MjVkZDA3ZTM2NWIxY2NkMTE1YlwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvVHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkFwcGxpY2F0aW9uXFxcIiBhbmQgVmFsdWU9XFxcInA2X2RlbW9cXFwiXScgLCBjb250ZW50KTtcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcInRhcmdldERhdGFTb3VyY2VOYW1lXCI6bnVsbCxcImRlZmluZWRQYXJhbWV0ZXJzXCI6e30sXCJjYWNoaW5nT3ZlcnJpZGVcIjpmYWxzZSxcImFwcGVuZFRhcmdldERhdGFTb3VyY2VcIjpmYWxzZX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MDd9XX0=", "enabled": false, "version": "0.10.0", "installed": false, "signature": "hC51RvJEqT35PFeY6VdDDc7EiEZGGqshvJCdidPZXYPkHjApL6L+ddV0qL5t8tqE8hzb9aS6Rtt5aPKkgxuZeibkedDvTou+4chv/4xLMdXJlQJESxBik+als34DHQMHcZ1hTpka3OlXhU+exYJ6ZUPBcpzNxXa/NxyK+HkRa60=", "createDate": 1567442840607, "expiryDays": 0, "revisionId": "b15bcc325053308e2795a9760543d44d", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1567774893482, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-beta-1", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1567774893500 -\. - - --- --- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; -\. - - --- --- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; -\. - - --- --- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.activeroutingorder - ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name); - - --- --- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.completedroutingorder - ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name); - - --- --- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.failedroutingorder - ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name); - - --- --- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.flyway_schema_history - ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank); - - --- --- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.transaction - ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4); - - --- --- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.rawbytes - ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2); - - --- --- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.serviceconfig - ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100'); - - --- --- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint)); - - --- --- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); - - --- --- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); - - --- --- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); - - --- --- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); - - --- --- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); - - --- --- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); - - --- --- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); - - --- --- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); - - --- --- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); - - --- --- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success); - - --- --- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); - - --- --- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); - - --- --- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); - - --- --- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); - - --- --- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); - - --- --- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); - - --- --- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); - - --- --- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); - - --- --- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); - - --- --- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); - - --- --- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype); - - --- --- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops); - - --- --- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype); - - --- --- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text)); - - --- --- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text)); - - --- --- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres --- - -GRANT ALL ON DATABASE b2box TO b2box; - - --- --- PostgreSQL database dump complete --- - --- --- PostgreSQL database dump --- - --- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) --- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - -DROP DATABASE postgres; --- --- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres --- - -CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; - - -ALTER DATABASE postgres OWNER TO postgres; - -\connect postgres - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres --- - -COMMENT ON DATABASE postgres IS 'default administrative connection database'; - - --- --- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres --- - -CREATE SCHEMA b2head; - - -ALTER SCHEMA b2head OWNER TO postgres; - --- --- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: --- - -CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; - - --- --- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; - - --- --- PostgreSQL database dump complete --- - --- --- PostgreSQL database cluster dump complete --- - +-- +-- PostgreSQL database cluster dump +-- + +SET default_transaction_read_only = off; + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +-- +-- Drop databases (except postgres and template1) +-- + +DROP DATABASE b2box; + + + + +-- +-- Drop roles +-- + +DROP ROLE b2box; +DROP ROLE postgres; + + +-- +-- Roles +-- + +CREATE ROLE b2box; +ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4'; +CREATE ROLE postgres; +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS; + + + + + + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) +-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1'; +DROP DATABASE template1; +-- +-- Name: template1; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE template1 OWNER TO postgres; + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE template1 IS 'default template for new databases'; + + +-- +-- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres +-- + +ALTER DATABASE template1 IS_TEMPLATE = true; + + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; +GRANT CONNECT ON DATABASE template1 TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) +-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE b2box OWNER TO postgres; + +\connect b2box + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box +-- + +CREATE SCHEMA p6core; + + +ALTER SCHEMA p6core OWNER TO b2box; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box +-- + +CREATE TYPE p6core.itempartitiontype AS ENUM ( + 'LOG', + 'TABLE_DATA', + 'TRANSACTION' +); + + +ALTER TYPE p6core.itempartitiontype OWNER TO b2box; + +-- +-- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box +-- + +CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text + LANGUAGE sql IMMUTABLE STRICT + AS $$ + + + select array_to_string (texts, sep) + + + $$; + + +ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.activeroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.activeroutingorder OWNER TO b2box; + +-- +-- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.completedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.completedroutingorder OWNER TO b2box; + +-- +-- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.failedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.failedroutingorder OWNER TO b2box; + +-- +-- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.flyway_schema_history ( + installed_rank integer NOT NULL, + version character varying(50), + description character varying(200) NOT NULL, + type character varying(20) NOT NULL, + script character varying(1000) NOT NULL, + checksum integer, + installed_by character varying(100) NOT NULL, + installed_on timestamp without time zone DEFAULT now() NOT NULL, + execution_time integer NOT NULL, + success boolean NOT NULL +); + + +ALTER TABLE p6core.flyway_schema_history OWNER TO b2box; + +-- +-- Name: item; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.item ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +) +PARTITION BY LIST (datapartition); + + +ALTER TABLE p6core.item OWNER TO b2box; + +-- +-- Name: log; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.log PARTITION OF p6core.item +FOR VALUES IN ('LOG'); + + +ALTER TABLE p6core.log OWNER TO b2box; + +-- +-- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.rawbytes ( + id1 character varying(96) NOT NULL, + id2 character varying(96) NOT NULL, + content bytea NOT NULL, + inserttime bigint +); + + +ALTER TABLE p6core.rawbytes OWNER TO b2box; + +-- +-- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.serviceconfig ( + id1 character varying(512) NOT NULL, + id2 character varying(256) NOT NULL, + id3 character varying(256) NOT NULL, + content jsonb NOT NULL, + bytes bytea, + inserttime bigint +); + + +ALTER TABLE p6core.serviceconfig OWNER TO b2box; + +-- +-- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.table_data PARTITION OF p6core.item +FOR VALUES IN ('TABLE_DATA'); + + +ALTER TABLE p6core.table_data OWNER TO b2box; + +-- +-- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.transaction PARTITION OF p6core.item +FOR VALUES IN ('TRANSACTION'); + + +ALTER TABLE p6core.transaction OWNER TO b2box; + +-- +-- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.activeroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.completedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.failedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin; +1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t +2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t +3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t +4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t +5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t +6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t +7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t +8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t +9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t +10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t +11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t +12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t +13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t +14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t +15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t +16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t +17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-19 14:45:47.956626 67 t +18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql -1818743481 b2box 2019-09-19 14:45:48.067897 117 t +19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-19 14:45:48.204782 13 t +20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-19 14:45:48.230868 147 t +21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql 1970508059 b2box 2019-09-19 14:45:48.395351 9 t +\. + + +-- +-- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin; +Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "enabled": true, "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 +Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "enabled": true, "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 +_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "enabled": false, "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 +WorkflowTask datamodels {"name": "WorkflowTask", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "05d747b40331bffd64ce9f7aa64c7692", "contentMode": "READ", "description": {"EN": "WorkflowTask Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1562691470454} \N 1562691470561 +2c101aa8e2234e1baf8bbd278ce3732d p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "2c101aa8e2234e1baf8bbd278ce3732d", "appKey": "p6_demo", "status": "6.0.0-beta-1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi52aWV3cyIsIm5hbWUiOiJXb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldvcmtmbG93IFRhc2tzIGZvciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NzgsXCJyZXZpc2lvbklkXCI6XCIyMGY2MTFlYjg2MzUzYjdhNzk3ZGQ2Y2Y3NmQ2ZGExM1wiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1Nzh9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDAzLFwicmV2aXNpb25JZFwiOlwiZjA1MDM1NzA2NGJiMmVmYWU4NTQ3ZmVmZGYzYmY2ZDRcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDAzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTc3ODk3OTgsXCJyZXZpc2lvbklkXCI6XCJmZmM2MTA4MTEzNDU2M2RkODMyZWEwMTI0NTdjODhmNVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIHJvdXRlSWQgPSBcXFwicDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRc1xcXCJcXG5cXG50cnkge1xcbiAgICBwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgICAgIGZyb20oXFxcInRpbWVyOi8vbXlUaW1lcj9wZXJpb2Q9MTBtXFxcIilcXG4gICAgICAgICAgICAgICAgLnRvKCdwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5DcmVhdGVSRlFUcmFuc2FjdGlvbicpXFxuICAgICAgICAgICAgICAgIC5yb3V0ZUlkKHJvdXRlSWQpXFxuICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbihyb3V0ZUlkKVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBwNi51dGlscy5wYXVzZSgpXFxufSBmaW5hbGx5IHtcXG4gIHA2LmNhbWVsLmRlc3Ryb3lSb3V0ZShyb3V0ZUlkKVxcbn1cXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTc3ODk3OTh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDI4LFwicmV2aXNpb25JZFwiOlwiMzlkYTE5NmNkNGNkNTM4YjJiMmU1ZTE1MWU0ZGQ4ZTZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcdGRlZiB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUkZRcz9jcm9uPTArMSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJGUXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UkZRcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUXVvdGVzP2Nyb249MCsyKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UXVvdGVzIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19BY2NlcHRlZD9jcm9uPTArMysqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRBY2NlcHRlZFBPcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfUmVqZWN0ZWQ/Y3Jvbj0wKzQrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UmVqZWN0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X0ZhaWxlZFJvdXRpbmdPcmRlcnM/Y3Jvbj0wKzAvMTUrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMgY291bnRlclxcXCIpXFxuXFx0fVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDI4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5ODQyMjU0OCxcInJldmlzaW9uSWRcIjpcIjc1YTUxMTc2Mjc1MWI5N2U0ODUzYzA0Zjc2MDZlMDRhXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgZXRoQ2xpZW50VVJMID0gcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdjb250cmFjdEFkZHJlc3MnKVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oXFxcIndlYjNqOi8vXFxcIiArIGV0aENsaWVudFVSTCArIFxcXCI/YWRkcmVzcz1cXFwiICsgY29udHJhY3RBZGRyZXNzICsgXFxcIiZvcGVyYXRpb249RVRIX0xPR19GTE9XQUJMRVxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5ODQyMjU0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc4OTkzNzUzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZCgncDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXMnKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzgwN31dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJBcHBDb25maWciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJBcHBDb25maWdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQXBwbGljYXRpb24gQ29uZmlndXJhdGlvbiBUYWJsZVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUzMyxcInJldmlzaW9uSWRcIjpcImY1OTkzMWM0M2Q3YjlkNTc5NzE3ODIxM2FiOTQxMDVkXCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwia2V5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInZhbHVlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInR5cGVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH1dLFwia2V5c1wiOltcImtleVwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MzN9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgyMTksXCJyZXZpc2lvbklkXCI6XCIyOWZmMTM4Y2MzYTliOTk3ZjE1ZDUwMWUzZjljZTc5NFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjE5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRhcHQgV29ya2Zsb3cgU3RlcHMgb24gdGhlIGZseSBsZXZlcmFnaW5nIGEgV29ya2Zsb3cgU3RlcCB1c2VkIGFzIHRlbXBsYXRlIChvcHRpb25hbClcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4MjEsXCJyZXZpc2lvbklkXCI6XCIwOGQyOWRhZWJhN2E0NmNiMjhiYTAwZWZlZDNmYTc0ZVwiLFwibWFpblNjcmlwdFwiOlwicDYucGlwZWxpbmUudmFyaWFibGVzKCkuZWFjaCgpIHsgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIH1cXG5cXG5kZWYgd29ya2Zsb3dTdGVwID0gcDYucGlwZWxpbmUuZ2V0WG1sICd0ZW1wbGF0ZVN0ZXBYbWwnXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy9kZWYgdHJhbnNhY3Rpb25JbmZvID0gcGlwZWxpbmUuZ2V0WG1sICdfREVGQVVMVF8nXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogIEFERCBPTkUgUEFSQU1FVEVSIEJZIExJTkUgVE8gQUNUSU9OICAgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG5kZWYgbXlBY3Rpb24gPSB3b3JrZmxvd1N0ZXAuQWN0aW9ucy5BY3Rpb24uZmluZHtpdC5AaWQgPSAnc2VuZCd9XFxuXFxuaW50IG5iTGluZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnTGluZSBpdGVtcyd9LlZhbHVlLnRleHQoKSlcXG5cXG5kZWYgc3RlcFhtbCA9IGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUoIHdvcmtmbG93U3RlcCApXFxuXFxucDYucGlwZWxpbmUucHV0ICdzdGVwWG1sJywgc3RlcFhtbFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4MjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJJbml0aWFsaXplQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJbml0aWFsaXplQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVwbG95IEJ1bmRsZWQgUmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIFRhYmxlc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTY3OSxcInJldmlzaW9uSWRcIjpcIjc5MDY0ZDkwMmQyZjg3YTVkODE2NjQ4ZmZiNzM2Zjk5XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai50eC5yZXNwb25zZS5Qb2xsaW5nVHJhbnNhY3Rpb25SZWNlaXB0UHJvY2Vzc29yXFxuXFxuXFxuLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnTG9hZGVkIGJ1bmRsZWQgcmVzb3VyY2VzJ1xcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcblN0cmluZyBQNl9UTVAgPSBTeXN0ZW0uZ2V0ZW52KCdCMkJPWF9UTVAnKVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6IFxcXCJmaWxlOi8vLyRQNl9UTVAvcDZfZGVtb19pdGVtcy5jc3ZcXFwiIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDM5OTM1Njc5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODkxMjg0NCxcInJldmlzaW9uSWRcIjpcIjRmMzA5MjhhYjA2YTRhYzhhNWZjNWU0MjA4MjczYzhkXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMDg5MTI4NDR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSZWNlaXZlUkZRVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSZWNlaXZlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYW4gUkZRIChjcmVhdGlvbiBvZiB0aGUgUkZRIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbeKApikgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODIzMixcInJldmlzaW9uSWRcIjpcImQ1YmJhYjk4ZGMxMDljYmIxY2M2Y2FmNjZmNzIwYzM0XCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbi8vIFRoaXMgc2NyaXB0IHJlYWRzIHRoZSBpbmNvbWluZyBSRlEsIHBhcnNlcyBpdHMgY29udGVudCBhbmQgd3JpdGVzIHRoZSB0cmFuc2FjdGlvbiBpbiBQNiBkYXRhYmFzZSB1c2luZyBpdHMgaW50ZXJuYWwgVHJhbnNhY3Rpb25JbmZvIG1vZGVsIChjaGVjayB0aGUgRGF0YSBNb2RlbHMgbWVudSBmb3IgbW9yZSBpbmZvKVxcbmRlZiByZnFDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIGFwcGxpY2F0aW9uSWQgPSAnRGVtb0FwcCdcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG48L1RyYW5zYWN0aW9uSW5mbz5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjMyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0NTQsXCJyZXZpc2lvbklkXCI6XCI5MWY3MzM2ZTk2ZjkyOTI5NDg0OWI0YWVjZGJhNjQxYlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODQ1NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTYxMixcInJldmlzaW9uSWRcIjpcImRhOTliZGFjMjM3YWRkOTMyYWM2ZTc1MmI1YjBiYmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzQzOTkzNTYxMn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NzI0Nzg4OSxcInJldmlzaW9uSWRcIjpcImI2ZjZmMzYzOTJhNTNiZjUzNDg0OWY0NDYwY2Q5NWQwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0Nzg4OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MzEwLFwicmV2aXNpb25JZFwiOlwiNjM2M2MyY2U0N2NkZGY2NDI1MzdkMTc0MzQ2MWFjOTBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODMxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ2NjIsXCJyZXZpc2lvbklkXCI6XCJmNTI4NjA2ODQ1MjEyZDJjM2U5OGJjNDc1YjZiMTY4MlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImNvbXBpbGVkQ29udGVudFwiOm51bGwsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ2NjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDI2Njc0MTUsXCJyZXZpc2lvbklkXCI6XCJmNDc2NGE1ZWM1Yjg1MTk0OTk3ZjAyMTZkY2RjNTIxMFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQyNjY3NDE1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDEwMDM0NzgzLFwicmV2aXNpb25JZFwiOlwiMDg4ZjYyZGMwMWEzODMwZTUwMWUxNmM0ZTIzZjhjZWZcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0NzgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc5MDYsXCJyZXZpc2lvbklkXCI6XCI3YTE4NDhlZDZkMGIzMGNiYTRlM2M5NjA2NTZmZTJmMFwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcF9EZXYnXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHF1b3RlLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHF1b3RlLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC50ZXh0KClcXG5kZWYgdG90YWxDdXJyZW5jeSA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKVxcblxcbmRlZiBxdW90ZUlkID0gcXVvdGUuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcXVvdGUuTm90ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHF1b3RlLlF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdQdXJjaGFzZU9yZGVyJ1xcbmRlZiBwdXJjaGFzZU9yZGVySWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1F1b3RlL1xcXCIgKyBxdW90ZUlkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9QdXJjaGFzZU9yZGVyL1xcXCIgKyBwdXJjaGFzZU9yZGVySWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgb3JkZXJMaW5lcyA9ICcnXFxuXFxucXVvdGUuUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+XFxuXFxuICAgIG9yZGVyTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpPcmRlckxpbmU+XFxuICAgIDxjYmM6Tm90ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTm90ZS50ZXh0KCkpfTwvY2JjOk5vdGU+XFxuICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfTwvY2JjOlF1YW50aXR5PlxcbiAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC50ZXh0KCkpfTwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+XFxuICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC50ZXh0KCkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkudGV4dCgpKX08L2NiYzpCYXNlUXVhbnRpdHk+XFxuICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5EZXNjcmlwdGlvbi50ZXh0KCkpfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOkl0ZW0+XFxuICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgPC9jYWM6T3JkZXJMaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuXFxuZGVmIG9yZGVyQ29udGVudCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPE9yZGVyIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpPcmRlci0yXFxcIlxcbiAgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiXFxuICB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMTwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPnVybjp3d3cuY2VuYmlpLmV1OnRyYW5zYWN0aW9uOmJpaWNvcmV0cmRtMDAxOnZlcjEuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCJCSUlcXFwiIHNjaGVtZUlEPVxcXCJQcm9maWxlXFxcIlxcbiAgICA+dXJuOnd3dy5jZW5iaWkuZXU6cHJvZmlsZTpCSUkwMTp2ZXIxLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHB1cmNoYXNlT3JkZXJJZCl9PC9jYmM6SUQ+XFxuICA8Y2JjOklzc3VlRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvY2JjOklzc3VlRGF0ZT5cXG4gICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZT5JbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgd2hvbGUgb3JkZXI8L2NiYzpOb3RlPlxcbiAgPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TRUs8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5cXG4gIDxjYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlByb2plY3QxMjM8L2NiYzpBY2NvdW50aW5nQ29zdENvZGU+XFxuICA8Y2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlF1b3RlSUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlJqZWN0ZWRPcmRlcklEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+TUFGTzwvY2JjOklEPlxcbiAgPC9jYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpDb250cmFjdD5cXG4gICAgPGNiYzpJRD4zNDMyMjwvY2JjOklEPlxcbiAgICA8Y2JjOkNvbnRyYWN0VHlwZT5GcmFtZXdvcmtBZ3JlZW1lbnRJRDEyMzwvY2JjOkNvbnRyYWN0VHlwZT5cXG4gIDwvY2FjOkNvbnRyYWN0PlxcbiAgPGNhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcyMzExMTE1PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcwMDExMTE1PC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MTIzNDU2Nzg5MDEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PlBvQm94MTIzPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5Sw6VkaHVzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT4ybmQgZmxvb3I8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlB1cmNoYXNpbmcgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkpvaG5zc29ucyBCeWdndmFyb3IgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMxMTgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAyMzQ3MjMxMTExPC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlNlbGxlclBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NTQzMjExMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD4zMjE8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkt1bmdzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5zdWl0ZTEyPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjIyPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+U2FsZXMgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMjI4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY3ODMyMTEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAke29yZGVyTGluZXN9XFxuPC9PcmRlcj5cXG5cXG5cXFwiXFxcIlxcXCJcXG5cXG5cXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIG9yZGVyQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwdXJjaGFzZU9yZGVySWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UHVyY2hhc2UgT3JkZXI8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cHVyY2hhc2VPcmRlcklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT4gICAgXFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3OTA2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4NjcsXCJyZXZpc2lvbklkXCI6XCJhZmUwNzhkYzQ3MjEzYzA4YmYxMTJkNjdhZTUyNTM4NFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4Njd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJsb2NrY2hhaW5cIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0MTIsXCJyZXZpc2lvbklkXCI6XCI2MmExZjI0NmMyZmZlZDU0ZmFiOGVkOGJjOGVkMjhjYlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiB0b3BpY3MgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ1RvcGljcycpLnNwbGl0KCcsJylcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ0RhdGEnKVxcblxcbmlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUkZRUmVjZWl2ZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIHA2LnBpcGVsaW5lLnB1dChcXFwidWJsXFxcIiwgdWJsKVxcbiAgICBwNi5jb250cm9sLmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0MTJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MTQ0NjI5MixcInJldmlzaW9uSWRcIjpcIjA3MzAxYjEwZGVhM2U4NzE0NWE4MmFiNWUwNjA2MGEwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQxNDQ2MjkyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ5MDIsXCJyZXZpc2lvbklkXCI6XCIxNTBkMGU3MDhhOGRlNTc1YTc1ZTQzNTE5OGRmMGU3MlwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0OTAyfV0sInBsYXRmb3JtNi5jb3VudGVycyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgUkZRcyB3aXRoIFxcXCJSZWNlaXZlZFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDAwNjAwNTYsXCJyZXZpc2lvbklkXCI6XCI3YTYwYTAyZjViYzFiOWY4ZmVlNWY0YjZjMzJiYjMzZVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2NzQ0MDA2MDA1NixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDAwNjAwNTZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTcyMDA1MSxcInJldmlzaW9uSWRcIjpcImQxMWE1YzM1YzA4ODMzMjQ4OTRlOGRjOWM4MzRjNTNmXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDExNzIwMDUwLFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTE3MjAwNTF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgRmFpbGVkIFJvdXRpbmcgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MjcwMDEyMSxcInJldmlzaW9uSWRcIjpcImI1YjVlYWUyZmNmM2QwNGMzMTJhOGZkNjg5NDBmYTI3XCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3NDQyNzAwMTIwLFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDI3MDAxMjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODI0MDAzNSxcInJldmlzaW9uSWRcIjpcIjBkMjYwM2ZkYTY2Mjc4MzQ3ZWY1Y2ViN2JhMjA3ZjAzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDA4MjQwMDM1LFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlB1cmNoYXNlIE9yZGVyXFxcIiBdW0Z1bmN0aW9uYWxTdGF0dXNDb2RlID0gXFxcIlJlamVjdGVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91c0BhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAwODI0MDAzNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDA4MTgwMDkwLFwicmV2aXNpb25JZFwiOlwiMjc5YmM0YTMyZjZmYThkNDA2YWZkZTRkODU0M2U0ZWZcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjcwMDgxODAwOTAsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDA4MTgwMDkwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTY1LFwicmV2aXNpb25JZFwiOlwiMzFhYmNjZWUwYmE1Zjc0NWY3NjlhMjE5NDNiMmE2YTRcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTY1fV0sInBsYXRmb3JtNi5kYXRhbW9kZWxzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5kYXRhbW9kZWxzIiwibmFtZSI6IlRyYW5zYWN0aW9uSW5mbyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uSW5mb1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbkluZm8gZGF0YW1vZGVsXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTM0LFwicmV2aXNpb25JZFwiOlwiNzMyZWFjNmEwMzViOTdjZDgzNjViY2U4Y2I3YmU3NWRcIixcInNjaGVtYVwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNkOnNjaGVtYSB4bWxuczp4c2Q9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXFxcIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD1cXFwidW5xdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgYmxvY2tEZWZhdWx0PVxcXCJcXFwiXFxuICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PVxcXCJxdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgZmluYWxEZWZhdWx0PVxcXCJcXFwiPlxcbiAgIDx4c2Q6ZWxlbWVudCBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDcmVhdGlvbkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZVN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXRTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU2VuZGVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkZpbmFsUmVjaXBpZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zZmVyUHJvdG9jb2xcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGVsaXZlcmVkVmlhXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRzXFxcIi8+XFxuXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbGFnc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIk9yZ1BhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3Vlc1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXVkaXRUcmFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlJlY29yZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIldvcmtmbG93XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGSW5zdGFuY2VzXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgPHhzZDp1bmlxdWUgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIj5cXG4gICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPVxcXCIuXFxcIi8+XFxuICAgICAgICAgPHhzZDpmaWVsZCB4cGF0aD1cXFwiSWRcXFwiLz5cXG4gICAgICA8L3hzZDp1bmlxdWU+XFxuICAgPC94c2Q6ZWxlbWVudD5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUaHJlYWRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQnVzaW5lc3NEb2NOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VDb250ZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIktleVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJMZXZlbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlBhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkxpc3RPZlZhbHVlc1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsb3dOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkFjdGl2ZUluc3RhbmNlSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJbnN0YW5jZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkluc3RhbmNlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJsYXN0VXNlckVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJmbGlua1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJGTElOS1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJzdGVwXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGU3RlcFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGU3RlcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGVwSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFjdGlvbmVkQnlFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhc3NpZ25lZFRvTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZXNcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIiB0eXBlPVxcXCJXRkFzc2lnbmVlc1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJwYXJhbWV0ZXJcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkZMSU5LXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInZpZXdcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJ0eXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkFzc2lnbmVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiPlxcbiAgICAgICAgIDx4c2Q6YW55IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lc3BhY2U9XFxcIiMjYW55XFxcIiBwcm9jZXNzQ29udGVudHM9XFxcImxheFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbjwveHNkOnNjaGVtYT5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5MzR9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTMxMzY4MyxcInJldmlzaW9uSWRcIjpcImYyYTBlYzk2ZDFjZmZkODdiMWQxMjA0ZmFmZWRlZDcxXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtmbG93VGFza0VuaGFuY2VyXFxcIi8+XFxuICAgIFxcbiAgICA8QXNzaWduZWUgbmFtZT1cXFwiRGVtb0FwcFxcXCIgcGF0aD1cXFwiLyR7SU5TVEFOQ0VfSUR9XFxcIiB0eXBlPVxcXCJVTklUXFxcIiBzY29wZT1cXFwiKj0qXFxcIj5cXG4gICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICA8RU4+U3VwcGxpZXI8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Gb3Vybmlzc2V1cjwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L0Fzc2lnbmVlPlxcbiAgICBcXG5cXHQ8U3RhdHVzTGFiZWxzPlxcblxcdCAgICA8TGFiZWwgbmFtZT1cXFwiUmVjZWl2ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVjZWl2ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZcOndWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJDcmVhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkNyZWF0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5DcsOpw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVwcmVjYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZXByZWNhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+QW5udWzDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJQcm92aWRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5RdW90ZSBwcm92aWRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlF1b3RhdGlvbiBmb3VybmllPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVjbGluZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVjbGluZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Ew6ljbGluw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJzZW5kXFxcIiBzdGF0dXM9XFxcIlByb3ZpZGVkXFxcIiB0eXBlPVxcXCJGT1JNXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uUHJvdmlkZVF1b3RlXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPlByb3ZpZGUgUXVvdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Rm91cm5pciBRdW90YXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuXFxuICAgICAgICAgICAgPEZvcm1HZW5lcmF0b3I+cDZfZGVtby5XRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb248L0Zvcm1HZW5lcmF0b3I+XFxuICAgICAgICAgICBcXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnJmcTwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPnJmcTwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+cmZxPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5saW5lczwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPmxpbmVzPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5saW5lczwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJkZXByZWNhdGVcXFwiIHN0YXR1cz1cXFwiRGVjbGluZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLXRpbWVzLGJ0bjpidG4tZGFuZ2VyLGNvbG9yOmRhbmdlcjwvU3R5bGU+IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkRlY2xpbmU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RMOpY2xpbmVyIHF1b3QuPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuXFx0ICAgICAgICAgICAgPE5hbWU+cmVhc29uPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+UmVhc29uPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5Nb3RpZjwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUQVJFQTwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImV4cGlyZVxcXCIgc3RhdHVzPVxcXCJFWFBJUkVEXFxcIiB0eXBlPVxcXCJFWFBJUkVcXFwiIGRpc3BsYXk9XFxcImZhbHNlXFxcIj5cXG5cXHRcXHRcXHQ8RXhwaXJ5IGVycm9yPVxcXCJmYWxzZVxcXCIvPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgIDwvQWN0aW9ucz5cXG4gICAgXFxuPC9Xb3JrZmxvd1N0ZXA+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDExMzEzNjgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUHVyY2hhc2VPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVB1cmNoYXNlT3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWNjZXB0IG9yIFJlamVjdCB0aGUgT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTEzMDI0MTIsXCJyZXZpc2lvbklkXCI6XCI4NWIzZmI0YjEzNDk1NGMxYzI2YjU4YjNjMTExNzkwZVwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5QdXJjaGFzZU9yZGVyIC0gQWNjZXB0IG9yIHJlamVjdDwvRU4+XFxuICAgICAgICA8RlI+Q29tbWFuZGUgLSBBY2NlcHRlciBvdSByZWZ1c2VyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz50cnVlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke0IyQk9YX0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAxMTMwMjQxMn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTgyMzc0NzYxLFwicmV2aXNpb25JZFwiOlwiYzYxMzI0YmI4ZGFiZTExMjFiZGU2MjczYjBiYzgwNzNcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUU2YTJrNExsNHRkbkFBQUFCRUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56ckVPZ2pBUUJ1Q2RoSGZvQ3h5aFlCQzdpUzZhTUVrYzNKcjJqQmRwYWNwSjR0c0xJMkZ4L2UrL0wzK3JQVDF4WkxoakhHbndTc2dzVDVPTEN6MDY5S3g1RHFFajdsRUppMjRBSFFLTVRrY0dNM2lPMnZDbXZyWnVBUTA5eWZ4SE5SL3FMVnp0RzVhL2hhZzMvbG56VEJTNVBFQmVRVkYxY3E5a3JZcnlrU2FuaVBQVlF2TlZvdFVUZW5HTTVrVVRSbEZtdSsyZTlkWTArUUZRU3dNRUNnQUFDQUFBVHByYVRnQUFBQUFBQUFBQUFBQUFBQWtBQUFCTlJWUkJMVWxPUmk5UVN3TUVDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUFNQUFBQnBieTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQTBBQUFCcGJ5OXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVNBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzREJBb0FBQWdBQUUyYTJrNEFBQUFBQUFBQUFBQUFBQUFWQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQWtBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzREJBb0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUE4QUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzREJCUUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpRdVkyeGhjM09WVWwxUEUwRVVQVk9XcmkyclZGUVVVZU1ETVMyWURrSGtCZEtYUmhKTjFRalk5OW5kMnpKa08xTm5aekg4STE1OU1DUTgrQVA0VWNTN0N3L0dHQU9aek55UE9mZk9PWk43Y1huK0M4QW1YalF3ZzhVbUFqd084U1RFa2tEZEgrcDhaVjFnYmFDdG5HYktqNnliYk1tVUpsYm1pZHlqYndYbGZ0ZTZMNFgxeW10cjhtMHUyOUZHKzU1QXQzMkx1czVRSU9qYmxBVG1COXJRcDJJU2t6dFFjY2FaaFlGTlZEWlVUcGZ4ZFRJbzZRbEU3NDBoMTg5VW5oT0gzWnUvdWJLeHlYUWIrM3BzbEM4Y3Qvd3dzRzRzdjFQODVraXFXTXVEa3ludDBZZ2NtWVIyL3JwTUZmZGhRQzdIeEF5VXAxUisxY1p2dk4zYTduSGo1cjR0WEVLN3VpUzc5QzhDM1NOMXJGanZPNU5rTnRkbS9KSDhvVTFEUEkyd2pHY1JabEdQRU9LNXdPdmJxQkpZL284T2djNk5td25NbWRoOUhwV1o4bmRmdFR0Ly9NTFVXVzhUbThuRU91TDZDWVA2S3N0WS9FeTdNOFJMSHFtQXAwdTBXcVdVMHVNZDRnN2JCbnM5MUhnQnpkVzFueENyWjZqOTRLaUdKcC8xQ251S09UNFhyMUNJY0Erb3ZObnFQc0I4aFcvaGZtVVg4SUJ0Z0lkNGhMc1Zqb2xVRmZnTlVFc0RCQlFBQUFnSUFFMmEyazZ3NEpEeG13RUFBT0FDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UZ3VZMnhoYzNPVlVsRnJFMEVRL2phOTVwcDRtbGkxV3F2U2h6NGtyV1FWUlFvdGVUQllFS0pnVS9QU3A4MWxrbTY1N01TOVBjV2Y1WU1JUHZnRC9GSGkzT21EaUVqTHNqc3pPOTgzTXgvTTl4OWZ2d0Y0aWdjTnJHQ2ppUWkzWTl5SnNhbFFEMmMyMzNta3NEZTBySmVaQ1RQMmkyZDZTZ3ZXZWFxUDZWMUJlVGhpLzZiZ1lJSmxseDhJN2RBNkcvb0t2YzRsZU4yeFFqVGdLU20waHRiUjYySXhJWDlpSnBuOHJBODVOZG5ZZUZ2R3Z6K2pjanlGNUtWejVBZVp5WE9Tc0hmeG5qdVA5MlhjeHNqT25RbUZsNUtESWZ1NS9rQ1RKK2ZhVEt3KytiaWtZNXFSSjVmUzRWL0pxWkU2QXNqMTJ6RGJId1Z2M2Z5Z0x4V2JJeTU4U2tlMm5ITHpYNTE3NSthOUVhRXZYSnB4THJ4WEZNNTRHdU51Z2kzY1M3Q0tlb0lZOXhVZVhrYU93dFovQkNoMEwxeE1ZVzFPb1l5RjF1bWNQdS8rb1g3cE9YREttVTdaazlBWGdocVlMQlB0SzUzdUdOdXlTcEZzbFdxM1N5V2xKemZHbXRpR2VIM1U1QUROM2IzUFVMdGZVUHNrVVExTmVlc1ZsbkZGM28xZktDUzRCbFRlYXBXUDBLcndiVnl2N0RwdWlJMXdFN2R3dGNMSklCVURQd0ZRU3dNRUZBQUFDQWdBVFpyYVRzU0M1K0JDQVFBQUdnSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpsVkZMUzhOQUVKN3RLMjJOVnVzRHhLc0hxK2dLaWhSYWVyQllFS0pnVzN2ZkpOTjJTN3BiTnh2Rm4rVko4T0FQOEVlSmsraEpSSFJnWHQvTWZEdkR2cjIvdkFMQUtXeFZJUTkxQjlZZDJHQlFha3NsYllkQmZxOHhZbERvNmhBWjFEeXA4RHFaKzJpR3dvOElxWHM2RU5GSUdKbm1YMkRCVG1YTXdMMVVDazAzRW5HTWxCNTZVdk5GSk94WW0va1pEM0d1ZVJ6d1B0NGxHTnVlTmplSnRzSktyZUxkWm90QlpTQW5TdGpFRUdQWDAyYkNIOUEvbVhIaFN6NThYR0FmeDJoUUJkaitWZ3dGMFZCRHpHL3R1RG13UnFwSnEwT00xWUZPVElBOW1TNjUvZFBEUnpOeEwrak9DeFZFT3FhNUs3UlRIVHF3NlVJQmlnd08vbkVEZzUxZnRtYlErRE1YSEVPT2ZpY1ZSa3Fia0M5UnhNbW5TSEgvR2RnVEJUbHd5Sll5OEJ6S1pOM1BCcWpBVWpicVpsM0xzSkw1R3F4bTZCclphcWFNMEZUS0gxQkxBd1FVQUFBSUNBQk5tdHBPYW14THF6UUNBQUFhQkFBQUpBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjNDFTNzAvVFVCUTliK3ZXcnBUQktxSWdJcitVYlNBRm5IN1pRaUFJQ2NrQ1FuSEpZdnpRZFk5WjByV21QL1ozeVVqRWFEUjg5bzh5M2xjWEE1R0FyOG05T2UrZWUrNTVyKy9ucjY4L0FGUlF5VUhDb29vaVNqTEdaSlJWNUxFa3dyS0NFWldLeTRMeFhFRkI1QlVGdXNpR2pGVUc1WWpiM09ueE5zTk0zZkdOajY0Vm5maEI5NVhSNWwzZkNHM2phUGZRakt3b0RxdkVmczF0MS9FRWUvZ3c5aVArSnZCN1RsdGdlYUd4VlgrN1l6TE12cnRiS051ejNKaUhEUFBGMG4vUXBXMi96UmxHNmpSN1ArNjJlSEJzdFZ6YWtST2RneE9HU3JGK2F2VXN3N1c4am1GR2dlTjFxcVc3bGZXNmIxdHV3d29jSVRoUWxUeXJ5MFh0SDBWeVhuTThKOXBnR0w5aDRGNnBRZDNSQjRkT2xqT2Rqa2RUQWxKS0YwVkJxWW5MUzVyWHIvVHVlSEczZHBmVERScXRtbjRjMkh6WEVSNXp4enlNVm9TS2hudml0NDlwV01NNncvVHRTaG9tOEVMRE5KNW9HTUdvaG9JSU9rWVo4dGM5TVdSczEvZG8xbGl4ZE1YdlFldVUyeEg1ZVhuMUJyWmRLd3lyTi8yRDY2clZ6VlY2ZkhsNnVkTG1oSEFBVUM0TXNpN3k2S1E0a1dBZ2gvc1lCOE1EUW5PVXhWTDdZSitSdWtUNkV5R0doeFN6U1cyZitCT1lIUEFyU0NXN3FpNlZ2eUJ6Q1Vud1U5ZjRqeWhxZjFpWXd1T2tUbGREVVNpc0lVMGZJSmVYcGk2UVBidWxYY2FNc0k3WmhETUhCZk9KWVNIem5nNGkxdFkzU0UxZFRsOUFPVWN1QWFxVWdLRUVhSmtFREdlL0UwcjM2UVUxcFQ2R3pHYW1qMkh6SE96czczbFZHZ0ljWUpGTXBBWkRGL0EweWM5K0ExQkxBd1FVQUFBSUNBQk5tdHBPZ3dUMmhxTUJBQURqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTFMbU5zWVhOemxWTEJiaE14RUgxT3Q5a21MRFFVV2lnRnhLR0hwRVV4Q0ZwVmFwVURFUkZJQWFscHlRVUp5ZG1kYmwxdDdOVHJCZkZaSEJCU0QvMkFmbFRGN01JQklZUmFXZmJNZU42TTM3TjljWGwyRHVBbEhqY3doNVVtQXR3TGNUL0Vxa0RkSCt0OC9abkE1bEJiT2N1VVA3SnV1aTBUbWxxWngzSkVwd1hsZm1EZGZtRzk4dHFhZkpmTDlyVFJ2aWZRYlYranJqTVdDUG8ySVlIRm9UYjB2cGhPeUIycVNjWTdTME1icTJ5c25DN2ozNXRCU1U4Z2Vtc011WDZtOHB3NDdGNzl6UFhuVzB5M2NhQlRvM3podU9XYm9YV3AvRUtURnlkU1RiUTgvRHFqRVIyUkl4UFQzbC9KUkhFZkJ1UXlKV2FnUENYeWd6WitaN2ZIYlpzSHRuQXhEWFJKZGZWZngzZFAxR2ZGYWwrYk9MTzVOdWs3OHNjMkNmRWd3aG9lUnBoSFBVS0lSd0pQcjZOSllPMC9LZ1E2VjI3R2I1bVNIdzMyQmRydGo2ODZmMXpBekZsdlk1dkoyRHJpNHFuMTFGZFp4c3JuMnAweG52QnZDdmhqaVZhcjFGRjZQRU1zc0cydzEwT05COURjMlB3T3NmRUR0VzhjMWREa3RWNWhQK0VHcnl1L1VJaHdDNmk4K1NvZllMSEN0M0M3c2t1NHd6YkFYU3pqWm9WaklsVUZmZ0pRU3dNRUZBQUFDQWdBVFpyYVRzL0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUUyYTJrN0ZrczQ1b3dFQUFPWUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpNdVkyeGhjM09WVWwxUEUwRVVQVk9XcnEyckZGQVVVZU1ESVMyWWpnSGxCZEtYeGlhYXFxRmczMmQzYjh1UTdVeVpuZFg0Yy93SlBoZ1NIdndCL2lqajNkVUhZNHlCVE9aK3pKeDc1NXliK2Y3ajhodUE1M2pjd0FMV21naHdMOFQ5RU9zQ2RYK3E4ODFuQWp0RGJlVThVMzVpM1d4ZnBqU3pNay9raU00THl2M0F1cVBDZXVXMU5ma0JseDFxbzMxUG9OdStSbDFuTEJEMGJVb0NTME50NkcweGk4bWRxRGpqazVXaFRWUTJWazZYK2UvRG9LUW5FTDB5aGx3L1UzbE9uSGF2L3VibTdoN1RiUnpycVZHK2NOenk5ZEM2cWZ4SThkNlpWTEdXSjUvbU5LSUpPVElKSGY1MW1TcnV3NEJjVG9rWktFK3BmSytOMzMyeGY5RGp4czFqVzdpRUJyb2t1LzR2QXQwejlVR3gzcGNteVd5dXpmUU4rVk9iaG5nUVlRTVBJeXlpSGlIRUk0R24xMUVsc1BFZkhRS2RLemZqOFpqWXZadU1Ca2NjYjdVN2Y4eGc3cXkzaWMxa1loMXg5Y3g2NnFzc1kra0w3YzRZVC9oREJmeTNSS3RWQ2lrajNpRnVzRzl3MUVPTkY5RGMzdmtLc1gyQjJoZk9hbWl5clZmWXo3akpkdTBYQ2hGdUExVzBXTjBIV0tyd0xTeFhmZ1dyN0FQY3dWM2NxbkJNcEtyQVQxQkxBd1FVQUFBSUNBQk5tdHBPMkliNzBJRUJBQUNDQWdBQVNBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGSkdVVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjNlZSVFU4VVFSQjl2YnV3c0s3eW9TS29GeE1QNG9FK1NMeG9URnhrRTVLSmhzVnc4ZFF6VTh6MlpxWnI3ZTVaZjVjbkVnNzhBSDZVc1dZZzhRS0pDWmYzcXJvKyt2WHJxejhYbHdEMjhYS0FMcDcxc2RQSGM0VnV5WVhDWHNLKzBMOG9mVGZUYzgrUk15NTF4cDUwUlhIS2VkQ2V3cHhkSUoxdzhVR2hZM09CSHlPRkZSdENUZm5ucUxDVnpNekM2TXJFcVI3WjRzaEZLc2hMZDdkT1M0WE42M0pwWEtGUG9yZXVXYlQ4MFRvYlAwblBtOTFUaGQ0QjU2U3dsbGhIWCtzcUpmL2RwQ1UxdzV5Wjh0UjQyK1EzaDcwNHRVRmhlekkrbmxCR2RrSDU0WUpjbk55SVZSZ2VPVWYrb0RRaGtIUitTU3pyZVduaUdmdnF2YzZwWWgweVBhR2ZOWVU0Wm45Y2N6VFJ5dkRydTVhSzZNRUoxejZqc1cxRTdOdzJ2ZGM4ZFlnaEh2YnhRbUYwLzJzVjF2L1o5eTJkVVNhTzcvNzNYcnhDUi80ZDZFRjh3NUpFWWo3NkxhOWd0ZVVCSHJTc0d1R0NqeVRUYlE0c3ZUMkgraTFCQjJ1Q3k4MmhHbU5kNHVGMUF6YndwSzAvYlhFTGo0VUhVdXRnRzV0WS9RdFFTd01FRkFBQUNBZ0FUWnJhVHFJeTErZElBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTNMbU5zWVhOemxWRkxUd0l4RUo3S1l3RlJGQitKOGVwQk5GcmpBdzhRRGhKSk5LdUpnTnpMN3JDVUxDMTJ1eHAvbGljVEQvNEFmNVJ4ZHZWa2pORko1dlYxK3ZXYjlPMzk1UlVBam1HOUJCbW9PckRpd0NxRGZGTXFhVnNNTXR1MUFZTnNXL3ZJb09KS2hkZnhkSWltTDRZaElWVlhleUljQ0NPVC9ndk0yckdNR0pRdmxFTFREa1VVSWJWN3J0UjhGZ283MG1aYTV6NU9OWTg4M3NXN0dDUGIwZVltMWxaWXFWVzBkZHBnVU96SlFBa2JHMks4ZExVSitBTU9qeVpjRENYdlA4NndpeU0wcUR4c2ZqdjBCZEhRUU1RREpBSENvczl2cGJLSEovVkdpNGhMUFIwYkR6c3kwYnJ4MC92N0UzRXZhTjF6NVlVNmtpcTRRanZXdmdOclpjaENqc0h1UDFaaHNQbUxlQWExUDNQQkFjelJKeVhHeUVrSjVUeFZuSEtDNUhhZWdUMVJNUWNPeFh3S25rR0JZdmx6QUlvd24xNHRwMU1Mc0pqbUNpeWw2RExGVXVxTTBNUUtIMUJMQXdRVUFBQUlDQUJObXRwT0ZGaXBBUkVjQUFCSmFRQUFMd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOejFWd0pnQnhGdWY0cnU5bmVuVXhDV0VnZ2dBbEh3TTNtMkw2bk95U1I3R1lES3lHQmJCSmNFTENucDJjelpET3p6TXlHUkgzS3FZaUFJQ0lpeWlFSXFNaWhrQkFDSXFpbzRJbWllSXYzOWU1TGVlL3ArLy9xNnA2ZWEzY21HVjU0aE8ycXJ1TS92L3JycjU2ZWVlNnZqMzhPQUhUMnB4aTBNWmt1aXNUVVRxYkY0RmFtMDhXZ2kwbVhoTVNzVHZpS3hHeUpMWTlCbkowY1l5dllTb210a3RnYllqQ2JuU0t4MVRIb3BySS9Cb2V6VTJMUXhRWWt0a1ppZ3pFNGtxMk53UkhzMUU3NGxzUk9pOEV4Tkc0b0J2T3BmR01NanFYeTlCZ2NUK1c2R0N5azhvd1luTVRXZHNJTEVsc2ZnMFZzUTR5ZHljNGlPVGQyd3ZjbE5oeURaV3hUSi95b0UzNHFzYzB4VUduV0ZocHdkaWU4TExFM3hTREJUdW1FWDBoc0pBYkxxZmVjTHV3OWw0YThXV0xueldEbnN3dGk4QWIyRnFvNU0xaVN1WFJKU2N5VFdEb0dhOWxvREFiWjFpNnNaYWgySVEzY05nTm1zREVKbnFmbTdYVEowaVZIbE1hSndVVXpXSjRWSkZhTXdTYTBCSnRnT3lSMk1YSGRHWU96MmE0WWV5dDdHOVhlVG0xL1IxUGVJYkYzeHVCOE50cUZGODdxRXFwZFNwZkw2SEk1WGJKMHlVbnNpaGlNa29uYjJKVTArVjBTZTNjTXR0SGtiU3hEbDB2cGNobGRMcWRMVm1KWHhTRHZUM2tQWGE2bXkzdnBjZzFkcnUxazExSDVQcnBjVDVjYjZQSitpZDNZeVQ0Z3NadGljQWtibGRnSFkzQVpsVGZINEFxeXpUdlloenJaTFJMN2NBeXVZcmRLN0NNeHVKcjZQeHFEYTZpOExRYlhVWGw3REs1bm81M3NEb25kR1lNYmFlakhZbkFUZGQwVmc1dXB2RHNHdDFENWNRWkhibHg3MWhyUEhjdGt2ZFRnRGk5YjNPZ1Z4blBaZ3NjZ1BwVE5ldm1CTWFkUThBb01qanBySWxmME5ucXVsOWxSTlpiSTFPbnE2QjlhdjNyakNJUHVkUmM2TzV5K01TYzcyamRjekdleW95Y3ptRG1BbzRwT3RyakZHWnZBMFRQV2JsNC9jTUdwZzV1UUlQWUdkMmR0M3JCcGtNRWgvSDdONE1DNm9mV0RmTVJzM2pLOHVmK01vV0RRckVnVEgrTTNyTy9mdUdFdDNnOEhrM2dEbjROTmh3ZWMramVQREc1Y3ZXYk54c0ZoYkQ2VTlCb2NHQnphTXJqbWdzRXRnK3MzTVZpd0xwY2Y3YnZZUzJvWDlqbkpURi9LS1RyRlhlTmVvWTlyamtvZHhxbFd6aU5hUXZTd3JXTkZKcHNwcm1Ld3E2ZmFPaEUrNC9sY01lZm14dnJPcHR0b2o1dmZOVjdNOVEza3ZSUXl6emhqaFpOOVN0dWQ0dGErL3N6b1VMYm9qWHI1T3EyTHRqQm9IOGlsMFBTSHJFTVFySi9ZbnZUeW01emttRWNleTduTzJCWW5uNkY3MGRoZTNKcEJPQ3hlbDhuMWpZODV4WFF1djkzc1MzbmJjMzBGdDIramQ5R0VWeWl1emVVSkxrNHhnKzVGaXh6aTVyTEZ2T01XVjZkU2VhK0E4NmR6OFJGVzliVkVOTGdsdFJqTW4xeHRCcDJqVHVITWZNWkZLZWZXVnRjZnN5NnpQVk5rRUZ2amplYzkxeWw2S1Fiek5rNGduZTNlbGt3aGczcXV6bVlEOFVOaTNEZWxPVWlzMEVxdmxYcUxPL3RReXI0QlliTlRTYXZjamt4SytPc3d0N3FEd1VtTkVXRHc5djBWR3FsdXlqdlpBbEpFdTV6aFpKMzZ1S3FQdHU1aUZRMEd4MDNKaHNHT0ZzdmRzTDA3UnIwaUR5UTlQZWYyTDZyRjBzM2xQWVQrZGd5UUE4N1lHQW83TFlPWW1uWnVQd0l1UFpIbGpCa2NYemR5ckJWamNHYlhjR1kwNnhRbjhvamlheHRrdUNLcXpNVDRHRkljOVRCNEUwejdObEdEdG1JeVA1V1p0T2E0VmZpUEZvOVg1TnNBZ3p0YkpwcHhnS0tkMjE4OTBoYzNsdkozTnU2OFUxRGdZR2dWTGh0ejZ2UjgrcUloOUd0bnBsQ1k4RktyTVlhODh3Q3BycWc3WnJ0WDNKcExGZnJ5WWllTllwaHZ0ZU5GcnVTTXdrUVN3NWx3eThaSjVLazJVNE42dDAwa3h4amMwSExTQjY1OGw2ODhkL0NaUFMxWC9IMHRKdGtDaGJQSi9JWTA2b3ZiMGtrOURhcXhxcUdCZFpZaHh4am55aUdHZkEvQktOQS9zY3ZMaDV2NThtWVlsSzlUVEwzODhGcVdQaUxORFQwSFpLeEZQck9KWW1hc2IxMm1RR25aVElxMXFWSm11cWJ4RkdaaHZmeVdqT05SQTg5ZlVlenV3ZExkMlpuaTFuVzVVUWE5NVp0TnNORXNyQjU3Y3ZrR0tiUmhzUEtBaklHNDJVRmN5QkNZL2xhYnBpdVlqUnJNaVhTdnp1ZWRYV0xNM1BKc0VHMHBNc0lWRmZSV05LNHQrZi9jV3Z4V3RNSTNSSDNtY05GeHQ1M2hqSE5oSlhZUEhrWWxkaStEbTFxTHI1WUpmR1Mrb25mdFdPNWkzOURyR2hHWjgrc2JMRzVkbXhrcjhsMElCY3Q3SlAwT2IyZGZRQTA1ZGFUNUNBYmFmcEJsOFA0V1N0TXk2MTFjWDZnMVh0cVpHQ3YyaitYY2JXYzZlUWVGTEU4REd4bGUzNW94UE1ibS9lRU0rcG9raXptRmwwMkp5VThlSEIxYTVvTzVRWlpZR2RMWE5zR2gvdE1HNUhEZWdZYU1TYWlUQmpjZnZOZ3doV1JIWFZUVlg0b1BIemhJSzNJS21aOTY3ZU41Q2cxRWlsTDJvS3pRZEFKUjh6bGJpemJBMnJSSjlvTzd6OVdYaS9hNXN0NFNqZy9pemxKZjN2OGZVYm0rL08xak9RZlBybmNkckFlTlRUMHZ2T2NnUHFOcVN0Q1AvdDgvQVd4S3Zqc095a096cGtUc1NIbmpZN2xkREs2b3VjSmFhYm1HVHNzUHZ3YkVhR0xWODhYOTdzWmtQakNuTm1TOVIxNGJralJyd0t2MzMrbE54WmFHYkxqbk5TTk1zMmE4OW9DODMzcExQdjVha3FkWlk4WWMxL1VLaFlXeUxETzRvS2VKMlZOL3psRGo4ZGkwblRKZEZHUTh1TlAxeGprcGlkMVhFa1FoUVlJYmxXN3Vib2xVL3VlbWphZXA5T1JvVWJuN0puK2tObTJueW1CWmN3eEttbXBSdFhXNjZWeEJXUmIvNExhdGh6NGlpZzNuSnZLdWg2bW9SeDhsMXRCK0dkazd6ajdCUGhsbm4yTDNNMWpVc09IWVVjK2FzaVdic2k0YnFxWmJzbUtZNkFwRk5oSW1Zc09TMHlramFXQy9qSDJHanFYaS96bXlrcFExeFZaTVRWTVN0bXpRdkpTbUlDMmNyNmswVzdQcG10YlNYcU04Tk95Z1BzdnkrelREbEQxWmNYRzJsblJOMTBpNmlxTFFDSnlSS0d2VnNWWFRiYjgxcGVpS2Eyc1diMFcyZm1zNm9kbTJpNUx6VmlVdFdoM1pWUXhGODF2VkJITDJKVENOSlBYTGxxZWpEbW5lTDFzcGY1WmllSnFIeXZOV1JiZjhWczFOcC9XVTRmSldWVXY0clpabEpmU2txdnF0bG1va2pHUkpjNkthMUgwTGF5YjlyOHFXb2dnck9WcTVsY2dpZ1ErczBBY2t1WjRraWJtVjBRdVdiaW1HU3JSazhvbGZJbTNranhiMGFidWVrVWg3TkFlMU15UGpjWXlzb1p3cVVjRjJwZFJuS3dieU5SUmIwTFR4enRJNFpmUUoxZ0xKRlprOGhETmxtby9VNUpBRzhVNXJKSzBoKy85cy9rZGppYTVDMGdncUdyY3N6dGFJcXltMFFDb2E1NEVHOGkxUUxpRlJ0dldBdWlFSFZyRlJMNXQ0azlVVk0xM0g2dWpjQnExdUdGcVoxYzBhVnVkelE2c3JsbDNINm5wTkhqWGFJbk8wcWhWcFZyZlU5S3k1LzU1Tlc1TjRWdkhraGp5cnFzWitlOVlzZWJhdWQxWFRpM3JYTEhsWHhSVmFHWGtxYkd3cG1vSGpUV1RQY1lFNE5HeWtqeTJjRzkxVHFFTFpoUGU1NWRERGlrSFdKU3RhK09mamluU3ZMWlVWa2NxMm9sTFZrRWtWTXFsVk1pbGNBcFczS0NWclc3ekdkZWQ5cHM3dHl2OEw4YWltOUNoZkd1bjdnV3JCR004c0d5TVQ1OEFuUG00dERTT0xUalBLdUdqWWtPQTBNSTVHYWRnK3ZqZ21aTi9LNUQ5ZERwREVmV29MRFdqbndIN05WbjM5b2lzQS82R3NscTV4NnJaS01wRmQwQXQ0WnhzRzdTaVduWXJHQSs2MXlUQ2lHZW1wdlZHQkR5V3d1eGxLUFluZEVhbFQybDF6MUFPM3U2c2ZSTHM3S2JlRzNYVTVoVmRYdDhwWHo2UXJKNWpqQlRUVU5OMGJlcFJHWmV4RGVWU01JUFhwVnZzVmRlSXhOTlRXdHhMVmtJZUNOWjJva3BkdDFKNXFOTmRmaVg0T2tVaE5nUjNkNTBBU2xUZ0UvSFNpaTVLclBQNGlITW5QS2xtSDloUkR0MHpVaFVjQ3NjL0tNcysyVUNVZUhVZzZXU2Yva2c5UlFrSTQrdGN5Nkk2R29XOW9aOWNObFNJcGVnM25FQ2YwcGlxaXM2RXFQSGVoaUUxKzFOTW16NHNvQThLeGhrNkl3VkwxVndENVhzd3lmU3piZkNYSXNvOFhxcW0wRnlSUlI1Nlo4RjZ4WHZ6ZGtqQkxOR1RFcTZYNm51TDdCYWNXN0NqVjFrUjl6RnIyRkxiMHVYTTcycnFOSzVhUVNYVFNhWnlwY1lzcElUWWJ3WU0yT1I3UWQveVBhUGplVUpJQ0dZYmxUSUdNU2swNHIrQU90VkhJTWx3amhlK2RBVHBVN3I4QUhWcGRkTkNLMENMb01EZzZETm1mYjBUUWdXc0dkeVJmQTZVQ0haZ1VsNkhEcEF4N1NuVFFyQU5GaDRuaHRGbDBXTFZzU3JFZ1FJaXRxQ0pINGRZa2YvSzZuYkJ0bTF1QjBNTDNYcUVsSDZHTGxXOUcrUVk1RjBVOThuMGs3dFhDbHRaWXJLRVl6U05NZ0NUVG1XcC93dTIybHQ2bFZXRUkrUVZTekZSRi9oRkVWSmRiaHZCUUM2OWtGZTV6UHl1UktjSllDZUpvR1R3akp1UWsrRnpxOVROUFN4YlIzcWVHOUN6S2tNa2pWdEpLa055MFIxbE9hVS9STkxJdHRmampiTlBuaWRtalNVajF2WWljeUpLNmJlUHh6L0lqQTNwUnRoTktBdVZCdFBQWVNWSFE0RWczYkkya3BOM0hKcnNtVEI3Ui9XanBZNStqRUhjYVUvZnoyaUNmNHJ1TkZrUmxuczJMZkoxeTVYQ2ZKMXZ3ZkY5Vy9YT3k0V2RtcXA4L2N4cGk3WEpkVmNVTjF5MHZoY1d0RU0rMEVQd1ROMXBFWUZVcDRiYldPZDNmQjZ0UDczNjd3SmFnS2RkWVJWVllxaE5oL1ROTjJTbVRRZ2JYSDQvay9GN3pjNW9HOThUeVZlcnppZHE3SkRsZkJXcWdQWG1OdEtuTUN5THJJK0ZuQmo3ZS9MeUxzaDN1VVlOanJFWkdRU3ZXVmhKcDNkQmtMMkVpSGhLeW9xWVVCVVZFeERuSlJNTEFrNitoNlRoR1NiaHBUSjd4UktTcExxSTRwYWZjbEs0bDdZUnNSL0lSazRkbnpQWDhtbzZZbEtlSUcvcCt4ZzNMVFU0Wk4ycnVRWFhqaHBYVzl5TnVKR3JHRFl2SERkekRncnFQUnB5WGlNUUhNNHdQZGxWOHNNUDRZQWpPR3E1N2xXSUFjakZGZExBd09sQlVvQXplNUZFaWdkbVFJVTZoS0VsVlhDQ1B0VFl1MlBRa2FhcTRZSW4xVEpuRmxIRkJDN0kvb29jMjhlT0R4dlVKNG9OV0p6N29Zb1ZYeDRkSXRLbnlvazFlck1aaEtaTWx2OUxlYXB0VjFxQ2NVd2trdFFSaVpVWGM2Mmg1UDROUXJSU3RVNjRGM1pGRkhEOHErT2NzLzBtWGhjNUVMVlMrZnVqWmoycFp2QVZYTnoxd01aS09ZdG1hUmtFMjZhVTkzRUJNTGVFWWpxYnJIbG9PTnltVGduOWFkZ3hQOTF4Yk14TzJtbkF0Vy9HOFpEcUJlSEx4ejhPL2xQK0hmRlE2R1FXSUlOVGFISDJVYzlOZjJWTVR4OVltZVdyaUpKSU5QVFZ4WEhtL241b1k5WitaaExISHFEcXRJVzQ0WG1TN1JwYWorYzgvbmJUWmREYWlUQnBWa3NwVStZMGVZSy91S1FyeFJKR0ZJMHNUTVlNQ2hJdXJYVU9NQlhIZXNPZ29qenhOc2NhNUg0M3E5VjF2ejVvYy9iWDJMTTVUSUo3TG92Q3NuVkRyci9sRWdIQ2J4eU9LQ3BRNThWVVJSQ0RWejdFU2FWZFBvSmVTbm1VbVpCTnovSlRyeXFacXBwTzY1V0dRU1JwYTBrMjU2UlFldU0xa1NqYlRLVDJKdTVMdFdDbGttVXpoS3JGTGZ4elZZdmNveDdhL1k5VkV0eXVyazZBNzZUa05vZHRWMDYxLzJ1c29BdHRhUlRZdTg3T0dYMWNqZGIzRzV4ellZNHZUU3hBL0xUNGllczRTVDEvcGRLTFhPdCtVbnJud1V4ZnBqMmVxOEJUbE92eUpLT250NDRTZXNDQUhucmxTZjBvTkpQQ2xJL3dTanBXZ04rRS9KZUJqZ24yR3QrTmVTRHV4VVRxUFJVNVlPQ2FaRUJpbjhaNS9JcWE2cC9ydGR2RGtCdmNnbWt2UG9wQnZ3Q0Y0V3E3NHV3VDN1ZXRaaHBuMkhOVTBURFhoNEQ4VnozOG9ucTJuOWJRbXF3azVvYVJTRGg0OGROdlJ2WFRLVXpCbFNCcWVuVXBqQXAvRVNaaG9tV21GTXRTMGl2SFlSQkptMHRRVG1wazJYVlBUTlRJeHVralcxRGc4eUQ1Tmx3Zm84aUJkSG1KdzdGUWZWakk0cHQ0UWVndWR3YUo2M2FWdkd2WHZLbm9GeFNTV0QwdnNNM0gyV2ZZSWc2UExKeEsxamJqdjVMMHNmWWR3U2VOdlhpa2FVWDYwdVRsNmM4TU5Zckdid2ZGVGY5TGNIR0Z1bFQxMGVheTVpWW5taGx2TkRiZWJHcTdLelExWG1odXVOb1N5elpsc0VWY2ptWEt2eEI2UHMzM3NpVGg3a24ydXpHdmxzemNYMDViL1loWk5lNm81c1RRR2g5ZDZIeUhPUHMrZWJvNVVjMmhVRFFheks5OHNpOE9uNEg3NmpQc1pCb2ZWZUtkVll2ZkUyUmZZRjBuUkw4WFpzK3pMRXJzM3pyN0N2aHBuejdIbkdmUTArcGsrZy80RGYxbWR4RmdhWjE5alg0K3piN0JGY2ZaTjh0YTMyTGZqN0FYMmZCeWVBN3k4Q0UvRTRRZHdaNXg5aDMwM0RudmdNWW05R0dmZmcxZWFzNWNwc2UvSDJVdnNCd3lVcGw5dWpiTWZzaCtSdUQrVzJFL2k3S2ZzWjNIMmMvWnlIUDRDcjhUaDAzQS9neld0ZU5rNXpuNUJKdmdscWd2ZlJlM1pyK0Q1NXRSTXhKbEVNajFBTWpYbm96by9ROUFNZHl2T1poSDNCK0VodWhEUTRHbTZmSmtCeE5tdjJXL284bHU2L0k0dXYyZnd1a2xmU21Fd0k0SWVCb3ViaUY5TmpWYWJHczEzbXo4d21Gbm15cVpJNkVUaWowMU5NWm9hYlRZMU90SFVhTXYzUzRDWXB1WTJ0NjBvelcwclNuUGJpb0p1bjFNejVqR1lWZjZDRm9QdVVzTlFrVGFjWEQ0SXM4aHhhRVA0MGhhQzJ0dkpxWEFNaDYrWWw0TG5ycDZEOXk3V2ZHK241MDc0ZWNvWkUyUEZ6UGlZeDhkczlJb1RlUlJlcnkvY1pLK3Z2YmZXbTg0SDdUYzFybngxcFduNHR3dXVhNTBjcmZuNWg2dGVkWUVhdHMxMCtnbURMVUVlVTBwVkNndzY2RWRDYU5HZDJITnVSTG9OeVFzOXQrWjNpNWMxOHlJa01UWHEycUZFdHZLZTVwM1o0dmRBa2VUeFBSRkdiaTdyVHVUeEJGVHNveFhLdjl4SWcrYjExUGZwbk5MMGdkelltT2VLMzAzcDhyYVBGM2VKNk5WVHcyckhpRmhRT3JsRUhNcmd0SVlpUVVNdkFzK3BZVzZ1ZTVVRXc5aFZFWkZHR3BBalFwNy9aRktqZ21WYkY0b2IreFo4ZXlIelZvKy90enFFTnoxRFpJWE9UTGloekMzelU3RFI0RHhwcTFOWWovc0tuM29PVHMzeW04T0Q4ZEVGNHY5bUN0OXE1RWwrR3FET2U3ZHRZelR4TUtTd1BwY2R5cWJRUmFuZzYvVnQyRXJlSEtySmxYNmZSUHlRVkp1VFNsVzRQVmk5S1B5UjllSUw3cnNlMzZsSzMwYWJVL043V2NoaHV6Tk9QMzFRL3IydDROZGV5aUJhN3p2RDNTanZRT1V2STVWYk5QeWxyTUtyL1AyejJ1dmpxSEp3Y2tnT1p0MGMvOG1oRG8vWEdHaFRnYmltUnJQUVJmNXEyNVFiejdoNGhxbTFTQnYrS21ENHhmVFphTlVLMkhRV0pzYkh4eklrdE1TL1FVcy80ekxiLytKUjlMSEozcDZxZGZ6cTd0R05iSVlOUnBJbjlsUDJBOWxHV3lqK1V5MDBmUk01U1FzMWVLYTFEamc0U3B6WVFGN0NmelN1NTV4RlcrQTRhSU5iQWMvV2NCVGNBWGNDZzQvaDNUUm9oM2x3VitRK2h2ZDNSKzZQeHZ1UFIrNTc4UDZleVAxU3ZMODNjaS9qL1gyUmV3WHZQeEc1Ti9IK2s1RjdHKzgvQmZkamZSNDlIdUhsQTd3OEFXVjdFQjVDdVIvR3V5eEkwSUhsck43dTlzVkxsczVybnpkOUQweC9tTlA0REY1aldBS2NEak5oSFh3V2E2djgwZkFJUEFyQWE3czVWNnJ0Z2NmNDZGbXdGeDVIK2xUYkIwOGdQNm85aWJYcDhEays2eW44NjhCWm44ZVNwSGthNjhRemlhM1R5WnFCTkh1Z28xS1dEVEFEenVTeTZQN1lVSlo0S0VzOGxDVWV5aEtIWitBTHlJMzRmWEV5N2FWS2pwdFErODFOYVA4bGVMWXA3YjljWC92T1NsbmVoTnFQTktGOUlFdWdQWU92d0ZleGoramVqalNwYi9NKzZCcnBqclUvQ1RORzJ2WkJmR1R4SHBnNS9Cak02bmdTRHFHVzJTTzllK0RRNFpIMmZkQk4xY09HUjZidmc4T3BPb2ZHN1lHNVoreURJMGIyd1pFanZVdjJ3THc5Y05SRG9lRGQzQVJ2aGpsd0hxeUU4MkVOWE1BVk9OWm5IaXF3bVo0M29vQnI0RkQ0R253ZFozK0QwL2dtdG4wckZQcFJJZlEyTHZUUjFVSjNDcUdQSWZGZXg0V2VUOVVGWE9oanFYcmM4RWpIUGppZXFpY01qMGo3WUNGVlR5eFg1U1N1eXV0cnFMSWRWY25DTU9UZ0hCaVBxTEl0VkdXYlVPV2NDbFcralcwdndIZUVLcmRDRi9maFNxNUtUMGU1S2lSNGZHUUpyNkxnaTBhVzdvRmVFdkV4d1A2NXk5dDc1N1h2aGlXVndsMENpK0V5V0FaWFlraDRWd1FvSzBQaFZncmhxUFpkckUzanRSY1JvRzA0UitJQ3R3dUJ2NGZqdmc4dkNZRWZSb0ZwQVF4eGdaZEtqUWhNbGw0MlFsanVpd2cvdlhmZTlCckNYdzBKdUFhV3cvWFFEemRFVnR4UUtQeFFLUHhRS1B5UUVKNXFQOEExMEk2emZUV21DelYraUROK0JEK3VhWGU1aHQwWGtScTlYSTFscEViZjFIYS9DZTErTTlyOXcyakRXNmUwT3duczI1MEVycmI3VDNEY1QrRm5RdUJ0WXZFdjVnSXJiU2d3eXRNdWdLNFNlRFVCM25XOWk3djEzV0JVaWtkci9RNDRCcG1kZ0RzRWlUZlhKeW5FT3dFNnVRQk1DUEJ6ckwxY1J3Q3pRb0FFQ1dCTkljQTlTT0plRk9BK1pQV0pCZ1g0UlIwQjdBb0JscE1BSjBjRVdGRkRnRThqaVFkUWdBZVIxVU1OQ1BCTHJQMEtmdTBMd0M1QUowbllmbC92WjJEbDR0MndDcVBFRzBhVzdJVlRHRWJiMWV1eDFvOW5vZlo1N1h0aGdNRXRjQW5WMWxDUUgxeU9NRm83c2dkT1hkNHhyNE53Zjlxak1PVFgzdGkyRjA2ZmhvTm03SVYxTlBnTS9QOVJXQzk2Mnl0NjlVZGhnK2lhWHRHMTRsRTRjK204anQxdzF0bjMvdTN0U3gvaWV3dHB2d3gzREVBZHUxRExJM0NQTUZEZVZiZy9uSVk3WXhyM3hrdHhsL29Jd3ZFdTNLUHV3UjBxV0hXcndJUGZ3Ryt4Wm1DMCt4MzhnY1A1dmhETzk4RWY0VTlvb3k3RTF0L0RQNkNkanNBMSs0L3dUMmlwZnhiVzlmditKZXo3Vit6N04rdzdGS2I5RlJaSThPOFMvSWNFLy9rS1JpcmY2SDlHZ24rQlY0VFgzNGdxa0l2bTlqNENHeGZ2aGVGcEtPc21jdmJtM2JDbDVPQU92cXFlaVRoMWJpam1YUGd2K08vUXFmL0Q2ZjlWME0raFNnU05CZnZnN0pIRlMzcDN3NXYyd01qNnBlaml4K0NjM1hEdTJiMUxkOE9iUzR4bThTanpiU3hmd0h6cU81eGhyMDhpWkxnQS9vYlNrRUFMR0dNMGN4YnFTMEswK1VLd2FjQllXNGlzT3dTeVhrWmtuZGNJc3ZhV0krdDhSTllGRVdTOXhhODVsY2hDZ0NRbkJaMWJCM1IrYjZvTzdoQ1NudWpxcU9hWURpRTVFSUdraVFrVjRMN1NoVHZMRVJnQkRRelFxekJBbjRZaDJzWFlkeW5HdnR0eDdUK09VZUJGREVNLzVwSGdseEZvM2dhL1llMGNtdmVHMEh3NWRNSExJVFJmQ3FINVhCVTBYd3FoaVgxc2VqMW9QaVc4aGlDalQvWW1nK1lvUVhOckRXaitkbXBvc2s1T2YycG9uaGVCWnFZU21uL0c4aThJelZmMkU1cGRLRVFzaE9hbEFwclBJalF2YkFTYXQ1VkRjeHRDY3l3Q3plMzFvWm1kRkpxNVNhRTVYaCthRjRYNE96K0NQeFhUWVVCVGQ4SGY0QWkwZzRIR1dJWEw4alJjbGk3aTZsSkV3KzNvOE1mUklVK2pZNzZJZGlsaDczTEUzZ3lPdld0QzdEMGIydmpaRUh0UGh0aDdzQXA3VDRiWXd6NFdyNGU5dTRWYlpxSmJaazJPdlR4aHIxQ05QWnc3TmZZTzRmU254dDZGRWV3Vks3REhYZ2V6Mkh5WXh4YnNKL1ptUXhjN2xIV0xvOWxiRUhsazJWbjdvRzJrVnh5SEppcVZXeGpKdFB6REdFQndHUE9QWlhUODg0OWwrMFNTNkIvRzJtc2N4b2ovWVpQeDMxSEpmOUdVL09rQTFnei93OFZoY0JPMmtnWGpBZjg5Y0hFbDk2VVJTOGREN3ZHUWV6elUzai8rdFhFT2MrcHoyRm5KUVptU1E2QmZpY05jZG9RQTB1bEloVFNlMmQyRzlMdmJ1M2M5Qm0rdFpHRkVUbEF6T1dIZ05SS2Q4Um9SRmljb2RpUm5NRzhTQm0rclpHRFhZVUNTVnpNNGlqTTRHalVtQmxzUUJmd0F6eGtzOVRtOHZaTERxb2lWWm9VY1pvVXErTDZmRnZxK1RmamU1M2hNQlFibTRrcWFoUHZmVlhJZnFNTTkwRzl5N3ZPajNHZDNzZ1hzV0dIYzVWalNySTVlRFAzVEtyZTAza2hZNldESGlWWGV3WTZuRkpxZEFCUnJHVnVJRkU5c09jV1QyT3NGaGdkUkcvS3JoUGJaRGF3MlNkLzFVa2hTUXBMMzgzNko5ZUFTbm9Za2UxdFBjbkdMU1VJblc0SkwzaWY1Szl4RTZMOUg5c0U3UnJyZkdUeXB1UVIzM0V2NUVmWXlyRjNPVDdCWFlPMUsvM0QwcnMvU29SY252RHQ0U25MVkNJYTE5L0FaVitPNDkvSVoxMkR0V241eXZ3NXI3K09QU0s3SDJnMGhsZk00bGZkTGdzcU5ST1VEbk1wTk9PNkRuTXJOV1BzUXAzSUwxajRjenIyUTVHZGMvL2s4dlZnSlBiaXRLckFhenhuOWNER2E2NU93Rm0weWlQQmN4a0hhQngvRktkUFFSdHZRU2g5QjNjL0g4allzMTJKNU81WjU4UDhiRmVVbVVTNFhaVUtVcWloUEV1VkNVUjR2eW1ORk9WK1V4NGp5U0ZFZUxzcHVVYzRXNVMzODJnazNpL0ltVWQ0b3l1dEZlWjBvcnhIbDFhSzhTcFJYaVBJeVVWNGl5a0c0Rlg0UFhmOExVRXNEQkJRQUFBZ0lBRTJhMms3S01QTytCZ1FBQU1BSkFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNall1WTJ4aGMzT3RWdnR6RTFVVS9tNmFkRW02UUtFdFVrVHdVU0ZOSDdjQzFrZHJ0WStOUnJmQlBpd2lJbTUyTCtsMnRudmo3azBwLzQ4ei9vcU9CWkVaaG5IR0YvNVBqdWR1WWlOdEdKcVJKSHNmNTl6N25mT2RlKzdaUFA3NzU0Y0FMc0hMb2grVE9RemdyU3hOMzg1Ujg0NkJkM1BJYUVrR1V6bWN4M1FQM3NPTWdmZDdrTU1IQm1hMVpzN0F2TzRYREZpNkx4cjRNRWRvSHhrb0dmall3Q2NNM1dyZGo0Y21HRVpzWC9KYTRLaWJNdHFjNUo3WWxEeDIrYkw0cGk1aVZaVFJVbDBxUi9reWpLZG8yN1FmK21xR1lUemZ3YjdoTlliMHZQUUV3MUhiRDBXNXZsa1IwYXBUQ1VoeTNKYXVFNnc1a2EvblRXRmF1OGRnbHNKUVJQT0JFOGVDcHVNSHR6bDBZWkxjelRpMVduQ2I0ZVJ5Y1dsWnVNTGZFcDYxSlVLMUxPSWFyU0pMS20vTHFNcHZpY3JGRFY2THBKS3VETGdySThFM2hWcVhYc3lqNW1KdXkrclVjQWMrUE0wcWVkWVZ5S29tMUpGdGhoNmhjZGFjZ0l3WldLVG9XUzNCRlYrdDJ4cTI4QjlZdGMzblphZ2l4MVZEKzljUzVHRjF1eWE4VmtBV25nL0JjM2w3dzlseWVPQ0VWWDY1c2lGY1JiSGJKMkxJV2R1dXFDVjRCc29NMlJXL0dqcXFIcEV2MyszZm9MMkxCTEVobzl2OFpqMTBrNjI4MkJ4TmR4YlM1MEYyUnJOWWtmWElGVVZmWis5Z3UvM2ptZ3BkQUN0MEF4bjdZWFV4OGNmQVpST2ZZc25FQ3pocFloRExKbGF3YXVJejBLMlorLy91bVJqQzZ5YXU0SE1EVjAxOGdXc01wMXN4Y2lvKzl4d0NvU3lJK1NxMUpyN0VkWWJVdFRrVFgyR1dvVDg1aEUxSHJmTTV2MW9LbGFpS3lNUU5mTTNRMnpxZ0ZSVVJLeE1PS2d5am5aeUNpVmZ3R3UzcDVIWS9ZYnFSR3d4bm41RWNCbHlHL0VFdkIwTmZ5OFJ1bGpJTUg5aFBxanpSbm1NcEJ2SldvOGJaQjZrOENTYTMxRHBsbGhKUm8veTBLUDZMcGl0S1hwZlpZem9OckhtcnRHWXQzTERXclBJcVJjVisybkVuSHVuc2RWeFh4QlRXQ1hvamZOdEphWDhHZEtlMXRZTzYxVmNWcWl6RFV1aUpiZUUxdEZRUDg4MGlVMWQrd0cwLzF2U09QQ21oV05GZWhvRjhxVzFGT2tUYUJJOVNQOTkyUmNyM2FKa2Z4M1hoelJMU0NidmRGZEdIVXE4RStoVzM5NWFRYXFBdFY3eE1MK29CRUNSWWI2K3VDZlJ2b0l1ZVFad2k2WXMwbWtHS3ZrQ3VNTElEVnJpSDFQYzBTK0UwdGQyMEJ2Z0ZMMUY3b3JFS1p3Z1R5VWlqTWZyU2JXdGkvVW5ZYWVyOXdvOWdQNkJyNUNla0Z4OGdjL1VldXN0amhHK01qZDdGb2E3N3lLYndDTG43NkdIVW0vVGJ3ZUZFbDk2ak83S0RvNGtpczBmUnU0TmpZM2QyWFQwRGc5cGZZZUkzb3Z3N0Vmd0RiNUpEWlR4R0ZYOGxGQW9ONTNZcCtMcVdrZXNtcnVNY2hnbXBuK3BrQVNQbzZwMGxXcU1rMGJRdU5rT1VMWXc4d3ZHNzZMdlROa0ptTXM0MjRjZm9TWk5rbkZxZXJKL0FHMGwvZ1FDMTdoSTVlSlpHcHlocS9XaDhNaVI5bFRET3cwWWUyWDhBVUVzREJCUUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rVVhWdmRHVlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT3RVc3R1RXpFVVBVNmFUaG9DTFFVS0xRK3BFZ3ZLb2w2QTJJQXEwVUtrU0NNZUtlcUdsV2ZtZHVMSVkwOXNUL2d1VmtoZDlBUDRLRlI3T2hJYmtGaXd1ZWNlMy9lOS92bnI0aExBU3p3Wm9ZL2RCQThUUEdMb0sxTXlIS2JHbHZ3YlpTOFd2TGJHbTl3b25odEx2Q0kvTjRYamxseHR0Q09lbXZJMXc5QTFkYTBrV1lidGRDRldnaXVoUzM3cXJkVFJQckRueTJuQjBQdDZ6SkFzRytNcDBxRjBycUhpcldmWXVRNnJoSi96WTFsT3RhZVNiQWp0TjVsaVdIOGp0ZlJIZ1Q0N09HTllPekVGTVd5bVV0T0hwc3JJZmhHWm9samQ1RUtkQ1Nzajd4N1gvRnc2aHIzUHNlNk1jcElyS3Q2dlNQdFpOd2JEZUtvMTJSTWxuS1BnTzBtbDRiVVMvdHpZNmhVdnFETGM1WHhHeTRhY254Z2Jjd2t2US9EVHY2Y043WTlPVFdOem1zall5TzZmNGcvajRHUGN3bWFDeHd6di9rZGhocTNmVi9pWUxTZ1BLejc0NTh6WVJ5LzhDbUFkWVhzWUJDMmNBRW1MUTJ5ME9PcndCc1l0M3V6c0xJNFM1Rlpndk9YQTRQa1BzTzlCNmVGMmx4YnNFN2FEUHI1MndCM3N0UGI3clh5QWV3Rkh3ZGJESHU1aTR3cFFTd01FRkFBQUNBZ0FUWnJhVG5JdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUJObXRwTzV3TGUyRVlCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFV1WTJ4aGMzT1ZVVXRQQWpFUW52SUdVUlFmaWZIcVFUUmFqY29Gd2dFaWlXWTFFUWozc2p0Q3lkSmkyOVh3c3p5WmVQQUgrS09NczZzblk0eE9NcSt2MDYvZnBHL3ZMNjhBY0FaYkpVaEROUS9yZWRoZ2tHdEtKVjJMUVhxdk5tU1E2ZWdBR1ZROHFmQW1tbzNRRE1Rb0pLVHFhVitFUTJGazNIK0JHVGVSbGtINVVpazBuVkJZaTlRZWVsTHplU2pjblRhek9nOXdwcm4xZVEvdkk3U3VxODF0cEoxd1VpdTdlOTVnVU96THNSSXVNc1I0NVdrejVvODRPcDF5TVpKOHNKaGpEKy9Rb1BLeCtlMHdFRVJEQTVhUGtRUUlod0Z2THh6YWszcWpSY1Nsdm82TWoxMFphOTMrNmYyanFYZ1F0TzZGOGtOdHBScGZvNXZvSUErYlpjaEFsc0hCUDFaaHNQT0xlQWExUDNQQk1hVG9rMkpqNUtTRWNvNHFUamxHc3Z2UHdKNm9TRUdlWWk0QjIxQ2dXUDRjZ0NJc0pWZkx5ZFF5ckNTNUFxc0p1a2F4bERnak5MYkNCMUJMQXdRVUFBQUlDQUJObXRwTzRqYzdQa2NCQUFBakFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpsVkZMUzBKQkZEN2o2NnBabGowZzJyYklDQ2NwM0NndWtvVENnbFRjai9jZWRlUTZZek56QzM5V3E2QkZQNkFmRloxN2F4VVJkZUM4dm5QbTR6dk0yL3ZMS3dDY3cxNFIwbER4WU51REhRYTVsbFRTdFJta2o2b2pCcG1PRHBCQnVTY1Yza2FMTVpxaEdJZUVWSHJhRitGSUdCbjNYMkRHemFSbFVMcFNDazBuRk5ZaXRiV2UxSHdaQ2pmUlp0SGdBUzQwdHo3djQzMkUxblcxdVl1MEUwNXFaUS9yOVNhRHdrQk9sWENSSWNycm5qWlQvb2pqc3prWFk4bUhxeVgyY1lJR2xZK3RiOE5BRUE4dFdENUZVaUFjQnZ4aTVkRFdHODAyRVJjSE9qSStkbVVzZHY4bkFiVzVlQkIwNzZYeVEyMmxtdDZnbStuQWc5MFNaQ0RMNE9RL3R6QTQrRVU5ZytxZnllQVVVdlJOc1RGeWtrSTVSeFduSENQWjQyZGdUMVNrd0tPWVM4QXU1Q21XUGhlZ0FHdkowMUt5dFE0YlNTN0Rab0p1VVN3bXpnaU5MZjhCVUVzREJCUUFBQWdJQUUyYTJrNHZqTHpnVVFFQUFCb0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNReExtTnNZWE56alZITFRrSXhFRDFGQkVFVW4yaml6aGlqTHFqdmhSbzJSQk1OdWhCMTRhN2NPMXhLTGkzcExUNCt5NVdKQ3ovQWp6SU9WemU2VUp0TXp6eE96OHlrYis4dnJ3QjJzVmpFQ09ieW1NK2pJcEE3MGtiN21rQjI3WGI5aHFGdVF4SW9ON1NoaTBHdlJlNUt0V0xPekRSc29PSWI1ZlF3L2twbWZVY25BcVZUWThqVlk1VWt4T0ZxUTF2Wmo1VnZXOWZibHlIMXJFd0MyZFM5Zmt4TmI1MkthR1hyVUNEenNDa2diZ1VLVFIwWjVRZU9OYzhhMWtYeW5sbzdYYWxhV2w0OTl1bVMydVRJQkhUMG94Z3FyendURWhrUmo2QThoZkphRzcrOXQzOVk0dzdGcGgyNGdFNTB1c0szQ2FwZGRhZDQwMk1UeERiUkpqb24zN0ZoSGdzbFpERXFzUEtmTFFTV2ZobFhZUGx2RVd3aXcxOHlQSUtOZXpQbTJEdmdmSVl4dDdIMERQSEVYZ2I1WVp6eXFoamp1L0xKUUFIanFVSU9KVXh3UFl2SmxGL0dWSXJUbUVtMVova3VwaWJTbDhEWUIxQkxBd1FVQUFBSUNBQk5tdHBPb1djZnMwWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWlZWUxoSU5FRXMxcUloRHVaWGVBa3FYRnRxdmhaM2t5OGVBUDhFY1paMWRQeGhpZFpGNWZwMSsvU2QvZVgxNEI0QngyU3BDR2FoNDI4N0RGSU5lU1NybzJnL1JCYmNnZzA5RUJNcWg0VXVGdE5CK2hHWWhSU0VqVjA3NEloOExJdVA4Q00yNHFMWVB5bFZKb09xR3dGcWs5OXFUbWkxQzRzVGJ6Qmc5d3JybjFlUS92STdTdXE4MWRwSjF3VWl1N1gyOHlLUGJsUkFrWEdXSzg5clNaOEVjY25jMjRHRWsrV0M2d2gyTTBxSHhzZlRzTUJOSFFnT1VUSkFIQ1ljQXZsZzV0dmRGc0UzR3ByeVBqWTFmR1duZC9ldjlrSmg0RXJYdXAvRkJicVNZMzZLWTZ5TU4yR1RLUVpYRDBqMVVZN1AwaW5rSHR6MXh3Q2luNnBOZ1lPU21obktPS1U0NlI3T0V6c0NjcVVwQ25tRXZBTmhRb2xqOEhvQWdyeWRWeU1yVUthMG11d0hxQ2JsQXNKYzRJamEzd0FWQkxBd1FVQUFBSUNBQk5tdHBPaWRnQ3VDUU9BQUNOTXdBQUtBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNQTldnbEFITmQ1L2g0c0RLeEdXRUlTRXJKc2JBbkpIRUk3dTdNWE1sYURBUjBKd2k1Z3FUaHQ3V0gyTGF5MTdKTGRBVW1PMnpSdG5UcE83SnhOWStkdzJyVE4zVHFIUVFwMjRpWnQycVQzZmQvM2ZhZXQwenI5LzVuWmcyVlhHZ1Myak1TYmQvNy85My92Zi85Nzg0YXZ2Zmo1THdBSWkzNC82dkMwZ2s4MzRUTituTVJuT2ZrY0o4OXdzcVJndVFscEJaZjh1SXpQSzFoUjhLd2ZXL0djSDAzNGdvSXY4dmpubTVCVDhGTis3TUNYL1BneWZwb3JmNllKaXdxKzRzY2VQTmRNNVovbHlwOVQ4TlV0K0JwKzNvOTkrQVhPL2VJVy9CSittWk5mVWZDckNuN05qd1A0ZFQvMjR6ZWFLZmViblBzdDd2amJXK0RINzNEZDczTHlleXpoOTFud0gyekJIK0tQRlB5eEh3SEc5U2Y0VXdWL3h0ciszSThRL3NLUHY4UmZjZTZ2dWU1dk9QbGJUdjZPazcvbjVCLzgrRWY4RStmK21aTi80ZVJmT2ZrM0JmL2VoUDlROEo5K0RPSHJDdjdManhGODNZOUIvTGVDL3hHNGVjTEs1bVJpMkxDTW9Wa2pNeU1USTRzeVk0M0wvSHcyazVjQzZxbE1SdWFHMGtZK0wvTUNqWGVlR2hzY254Sm9IWDNBV0RRQ2FSb1RtTEJ5cWN6TTdRSmJoMmlRWldTc00wWjZnUWJmY1B5ZXNhSDdKaWJ2R2g4WkhoNmNIQlJvY21wR0pndlpFNXpkWGVveWRISnc3TVRJOEgwalowYkdxS1ZqTkp1YkNaeVgwL29EQVdNNkZVZ1FVT3Zpdk13SGJKeWtzM0VnbFVsWnh3UXVkcTJGVkRaNlBwZTFzbVkySFRqTHhmSVdNM2R4M3NvR2hvZ0hFcGt5MHZuYkhVbHpoalVidURNMWN5cGp5Um1acTFIYmZVYkFONVJOc0wyanFZd2NXNWlibHJsSll6b3RtYWFzYWFUUEdMa1VsOTFLbnpXYklpNDdSMVBad0h6YXNKTFozRncwa0pCejJVRGVERXlrNXViVGt1ZkZtSkZrNEExbU5tUGxETk1hVENSeU1rOERHMnpjQW50cm15ZXd4U3paUS9OOFpYdHBObWFNL04yNWxFbncycXJiNmZRWlRjMmxMQUgvc0p6UFNkT3daRUtnZlh5QjVNekpNNmw4aWd3Y3pHU3lORXNwOG9XaU1IdFNTbU5JV0g0enA2dlVhbDBJRU1yQWtNdlpDYllxdTVoS3VCTzF3MXpiSUhESW13Q0JoNjRWTkVtZHpCbVpQRWtrWGs0YkdhTzJROVYyczFacmpReUJXNitxUm1CeGszRjc1dHVmTDhZWG9ybXJ1NXBTazNvRXhzbjdMVGxrcE5Qc2FNbUZqSzFRWUgvTkFIRGM3VVA5bXlkU014bkRXc2lSOXg3enBHU2dPc25IU0ZoOVhwS0REM1RWbUFhUEZtVGtlVGNJdm40RGtnWnE5cG1UMW13MmtRL2szRWhkUGszajBwU3BlY3V4Wm9hdDJVdHA5VWhQUy9TdXJnMXA2WGJNVzdCUzZjQm9Lczh4ZVN2UFVLSzBpUXg1aUhTZFY5NkpPS0pKcnJCWkpkU3RJNlhTMlpRMU81cWRFZWhaN1prRnIreGMyL2YyMWF2Sk5VYmdqZzF4UWE2NHlGcVlCNEZ0YTVscExvd21DM2FWTlEvbWNzWkZ0MC9iNmoyRHFIVDNqWUVLZVFQZXJXVlh1TGVhdm9GTm1Cb1d2blhDTXN4enA0MTVHNnVDRitpZ3BPQWJBdS9lWE8vYUxMdzM1NnYyT1o3T25uZklIdldDKzNWRXNSVVlzV2FQcDlLV3ZhWUpYVTZ5Q1l2eVFxQWdqWThwU2J1SGdINE5ZZ1hlc1lsb05vdkM4N1V4RGN1a3NaQzI3a3huelhOM0d6bURNSzdlTnJ4MHIwMG03U3BHenVrdUVGaW5XQXJPTXBOd0J6OTdmV3pZckNud3BiTUdIY0RlZjcyT3Z0NU9zRTlkeDFPVE40VHZlZmtQbzk2QVBYRmREbTdlc0RVbTVIdzZlMUhneWFxTGFQTzQydEJKVE9YWHd4VHZwL1pwckZWbVRIcFhTOWh2cXJrRms2d1JlUDRWYTRDWFFHRkhnZzk0TTJFamJyR2hhZmp5S3htZlo1WS9kTzJPc282Z3RTR2l2L0lLaCtpWjZ3OXZ5R05lTHJxLytzcEg2Wmx4djJHYU1wL3YxRFRORGlnZWhsM2xlczc3MFo5ZlVycFhFM2JsdDdlNkN4b25RVTVDQWtmV3A0b09nUU5tMnIwNXJPK3lyeW9tc2dzNVU5TFptYmVKVldZZVllNVYvQy8rVDJELzFWa1JkYm1vRnRlaVdsaUxoUFJ3WEF0R29rRk5DMnFSV0pTNGpXdkpSR1E2NHJRSHFTV285K3R4amY0NytiaE92OEU0NVIwSlVTMmt4WU5CVjRxdXI1WkNFcWdVaVVTMXBDTkJDMGU1UnUvbk5La241Um9zVkYySlJBdnJORFNxNmFiVG9sTXZxUVZOR3FtSGpLQ1JOQlA5d1RCSkNVWmlYRWZhWkRnMkhlUzZTTDlibHdpYk1xcWJYQmVMUkdLUjZaSU9Ha2x5WTlPUnFKMm4ya2l3UHhnUFJVTDBKT3Y2U1NYYnFWRXVxWE9mbU02bzRseXRsekdnUlJPcnNUUFNlSkRsRWd1dW51bTRvNGRxd2s2Yk00SktJZElaY1pqdjF3aUI3dnpHa29hTWhhTjZUQXNGcGE0WlJHRTRGT3ZYdzFvd0dJOGtRMlk0bkRDVDlFNGFqWnV4WUxBL0hqZU51R2JFa3JvWkN5VkRzUmpKTW5TYURhMmt1Wi95U1dtRW9wRm9LR2JRdjVDdVJlSWhMUnBOUnJWRVdBOGEwMGFNeFBTSFpGeFBSSU94ZUV4cWlYNk5LWlQ5WmpRU1pPT2lab2dLWkhNd0tDVmgwV1UwVE53a28yWlVEK3VzU0RPSXZKQ0tDYnpJeVRjcG9XTVBKVUxnbHF2ZG5nbnNxOVdGYng0VVVhZUtldUVUdUhGMU4yNGNsMG1aby9NVXJaZE9EKzh6T21OcTRLUlJZR2UxY0tZS1JUUUpkTmRDTkNNek1zZjN4NEY3VWhrckZJbXlzR1pGK0ZXeFJhaXEyQ3BhdkVFSnEvaFdqTk9LRmpjSTdLaHlMYUxnQlZWc0U5dFpRYXNxZG9pZENyNmhpbDJpVFJXN3hSNkJMcStoU21Cd3crOTZQSzJmVWtXNzJLdUtHL0VKVmV3amE3RW9ibExGeldLUEtqcHd2d3FMRW5HTHVGWEZhL0h0aXRpdmlnTjR6QnNkRVVWMHF1S2dPQ1FRWFBjMWd5cHVFMTNNVTdjaWVsVFJLdzZyb2s4Y1VmRldQTWJBSnptWjVjUzI0NXdpQXFyUVJGQVZJYUZ6RXVZa3drbFU0S1lyYmlnQzI5Y3c1YzNFSUNPTWVldkxhMG5FQlhaVm5XT0JsdFZYVXJSYmxDcE9XZXloL0ZKeGs3eGc5N2VCRjI4RVNtNXhzZXY2Ylo1dnFmWmFlZDIrbmozODBxTHgvTEhpOGMzRHNUbmZleDU1eVFGNTVtWmJSWkRrYjhIOE5aRGQvMkRYYTh0UTNUWDlnRFNyZmhhNHpkT1JrclZGYWhwZWtsZFo1bkg3NVFWcExsaXlkUGlkb0tGcGFmdi91TFFXY3JUaFRkVmVlTVZ2U21YcTdXL2ZYbDhIMm10OTdDRnd1MHFBaDdMcHREVGRUNlROY203ZXV1aEdrcTRxdk8xYlkxWFpWQXFjOUdDUFIvaVp6WXRKM3I0VStmS3BCNlY5QWo5RmhhNVR6Rk5UcWhoRDIxYlJVWWl0TkU2Wk5mSmpGR0R0b2ZmUzBJeGQyRm5vWCs2SjVLa3owckpqcm5hRmo0TTEzaFBxMHp4d0cwazRsVW5RUkNRS0g2QjJFZHBxeXBxb3EzdloxSlJOSjl4c3ZaRkk4SmdxQzRYZzc2bTFoR216a1hiUUxuMlkyRlgxUnBrMHpCbnpBa2U3VnQ4NEY3NmtydktGV3ZmcXJRUjlxUEt2RFZaeld2eGJqL3hMZkhPK1ZpZjd4dDdWN21rNzVZaDlvMGZlMHVqYzdRbm9WM1BqcWhhMTBCUTU0V0l5TzU4eUJZYXJSQ0V2L3VNY2tJcmZiaXFPTklWNUtNTGU3c0JlZFNQWjJiVW12RldEdk0yNWdpMnRZWUhMWFd0aTE4dHh1WG5sTGNwaitIbjJHckZ2L05ad1UrQi9jUk9wWC9mTjBLWlk4S1hObllEclk0U3Y2MTRPRlFjOW5DRzZ6K0JXMU9Fa2dBYnN4V3N3Q29IVFZLcERQZG94VmxadXB2SmRaZVZXS3Q5ZFZ0NU5aWHFucFB4TytQaTFoeVRjUTZVTUZEVFNzNldudGI3M2NGKzdyNzFoR2I1UDIyUE9VTXAvcGdmbzJJb3d6bEx1bU5NYjM0WXB3TTdkYTJ2aEhMM1kyYjFiOEIzNFRwTFB1ZnR3UCtuam5FRzVCa3pibzB6NmJhUlJDWG95R2tsNVJqTk50UTMwVkF0b2x0RlFpU1dHTFlqYldNSk8zeUlXdFloRkxXSlJpMWhVSkRGRDJsamY3SldzYjZ6VU9FRFczN0VPNjFONFlGM1duNnR0dlZLSjVWVmsvZUE2ckM5Z0tWZ3ZrTVljdGJHK2M2N00zaFUwVGJVMjF6OEgveVZzOFQwSGRhcCtCVnVuZXBiUk1rRTF5N2hodEtlM2Rkc1N0ajlkaE5OcUd6WU0vb3ZOZlRpT0F6aGh3MnB6Ukxxd0RxQ0pTTTZTMm5sNzVPc29sMFBlQlpBbHQyVndCMjBBcmFUWno1cDNUUFV1WXlkcnZvUmRwUHgweitFbHRGV3FmZzEya1cvdm9WWFFRWjdQcW05eGhCVVpPY2lYRHFTd2czaGxFSFV1aUFXcVc2ekJ3dTRLRnZZd0MrMVhZV0dDUkV3U0MvZVF2V2M4c25BZUZ4d0E0ZzZDclZEOW96MmZ3ZDdlSmR4NGVnWDdwZzVmeGswQ3k3aDVqSElkZEhMeXRmc3U0eGFCSnpETnVWc0Zuc2Yrb3cwck9EQzFqTTZqamUyTjdRMUxPUGdNRGptNTIrb3ZvNnVPT3Zrdm81czdiM3NHUFc2VGIyMVRiMTk3NHhJT24vM0lONS9zZTlwMlRMYXZoeXdET1ZZenVkUnVjcW9JTGFkanRLQk9rbXViUk81M2syTS9USTc3Q0pVS0MrUVllY0pGUEVpNUNJV2cxK083YkVkOXREZ3RqOUtvTnhBRHpYZ2p2b2QrT1RqbDhiMzRQdUxoKzEzdW5MYUhpMjF2b3JZZm9MYnRxSHNSSFFvZVVmQm1CWSsrUUN2Wm9mUXRKUEN0ZU15ZDAxY1RmSjZBdHA3UG9hLzNNbzdVWVFVQm5rcHRDY0hTOURYYTYyV21iTXJhaWpEYjhEamVWcHl5dDl2eTMxRjAzQVo3NGp0V0VKcnFQZHl6QkgwWjRiRSttc0JMaUN3aGVyYW5id214a3FJVzJ6VVg2TGxJZ2ZpOHJiREhFVkZVMklGMzRsMDJvQTY4bTNKMTFIdTdEYUxlQmZHRHhNdDc4RU51OExxZnZJYVpiVmxCM1ZTUEd6RGlsY1k5VkJZc25IQ0ZZcmdTeFdCZFZ3eFg5Y1Z3NWFzU3Jsai9lNitrdjc5Uy94dXZxcDlEMUhyMFArR0d5MG1xWlFiVmd2NWxISzNVL25BWjAycFJ1MXJVcmhhdGR3Smt2YTNoeWRvYWJxL1U4T2FyYWlqWVY5THdQcnpmZGFRSDNaRGZXWXA5ZmNYWU4zRFUxMXBIYWx2cjIzMlhjRWRKc3hPd0hxTzE4WGdadTUyMlR0ZzV0a3JZT2RaWlorYytZTE83bXphekR4SktuK3RUVDlsNFByUitQTWNxOGJ5VFpMK3JCaDdtd0J1ZUg3YngvQWlWR2MrYjNBMzZVQWtQZTFrUlVJTU5xSThRTlZ6Q3QxUWllaTl0RDArVWJkeUhpb2dPRlJrNlpIdGRuWjB6WFA4N1pHUHowZWdXRzF0aDQzWVFmcmpDSTkrSEg3MFd0SytxUlB0QjB2ZFVEYlFGL3RhUDlzZkswVzVyd28vakk2NTNqOUJvSHE4UXBpV0lTc2Z1TE50VEZYelVEVklLUGthblNHSG5QbzVQMElnbWZCS2Zja1crbXVqZ241NFZERTYxM3RuZ2JxSkRVOFRDOE1TVWJ3VWpuRDN1N0tjblBvdTlmTDRSWlNHeWp6UWVRVGM5Ni9BVE5xS2ZKS25BVWRKM2dFcW5TRU1BenM4ZTk3blZmWTdZYVJPRzNPZCsycVllUXZQL0ExQkxBd1FVQUFBSUNBQk5tdHBPWTFJN2xWRUJBQUFhQWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNaTVqYkdGemM0MVJ5eTRFUVJROU5jYjBHTU40azlpSkNCWkt4bU9CMkFnSkdSWUdDN3ZxN2p1dHBMdHFVbDNqOFZsV0Vnc2Y0S1BFbldiREFwWGNPdmR4NnR4N1UyL3ZMNjhBTmpGWHd3Q21Ba3dIbUJHbzdHbWovYjVBZWZsNjVZcmh3TVlrMEdocFEyZTlMQ1Izb2NLVU14TXRHNm4wU2puZGo3K1NaWCtqYzRINnNUSGtEbEtWNThUaFVrdGIyVTJWNzFpWGJjdVlNaXZ6U0xaMTFrMnA3YTFUQ1MwMmR3VktEK3NDNGxwZ3FLMFRvM3pQc2VaSnk3cEUzbE80Y1N0VnFPWEZZNWZPcVVPT1RFUjdQNHF4OHNveklaY0o4UWpLVXl3dnRmSE5yZTNkZmU1UWE5dWVpK2hJRnl0OG0yRHRWdDBwM3ZUUVJLbk50VWxPeWQvWU9NQnNIV1VNQ2l6K1p3dUIrVi9HRlZqNFd3VHJLUEdYOUk5ZzQ5Nk1GZloyT0Y5aXJLek9QME04c1ZkQzBJOEwzaHFxZk05OE1qQ0U0VUtoZ2pwR3VGN0dhTUZ2WUt6QWNVd1UycE44MXdvVHhVdWcrZ0ZRU3dNRUZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUJObXRwT2ZZS3ErNlFCQUFEbEFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpsVkpOYnhNeEVIMU90MWtTRmhvS0xaUUM0dEJEMHFJWTZNZWxWUTVFUkFJRnBLWWxGeVFrWjNlNmRiV3hnOWNMNG1mMVVGWGl3QS9vajZxWVhUZ2doRkFyeTU0Wis4MzRQWHN1THIvL0FMQ0ZKdzNNWWJtSkFQZERQQWl4SWxEM3h6cGZleTZ3TWRSV3pqTGxqNnliN3NpRXBsYm1zUnpSNTRKeVA3QnV2N0JlZVcxTnZzdHBlOXBvM3hQb3RxK1IxeGtMQkgyYmtNRENVQnQ2WDB3bjVBN1ZKT09keGFHTlZUWldUcGZ4NzgyZ3BDY1F2VEdHWEQ5VGVVNGNkcTkrNTlxTFRhYmJPTkNwVWI1d1hQTHQwTHBVZnFYSjVvbFVFeTBQdjgxb1JFZmt5TVMwOTlkaG9yZ09BM0taRWpOUW5oTDVRUnYvY250bnQ4ZUZtd2UyY0RFTmRFbDI1VjhFdWlmcWkySzlyMDJjMlZ5YjlCMzVZNXVFZUJoaEZZOGl6S01lSWNSamdXZlhVU1d3K2g4ZEFwMHJGK1BmVE1tUEJ2c0M3ZmJIVjUwL25tRG1yTGV4eldSc0hYSHkxSHJxcXl4ajVYUHR6aGhQdVo4Q2JpM1JhcFU2U285bmlCdHNHK3oxVU9NQk5OYzN6aURXejFFNzVhaUdKcS8xQ3ZzSk4zbGQvb1ZDaE50QTVjMVg1d0VXS253TGR5cTdpTHRzQTl6REVtNVZPQ1pTWmVBblVFc0RCQlFBQUFnSUFFMmEyazRVT1JSWDJnQUFBTkFCQUFBUkFBQUFVMmx0Y0d4bFUzUnZjbUZuWlM1emIyeHRqOEZPd3pBUVJPLzVpamxTQ1ZWdzRGUnhnaitJeExHU2F5OWhKY2VPN0hWTGhmcnZiQjBTa3NKeGQzWm4zZ3pKZEwxQmpwNGR5eG43aCszVDluSFhORFlHU2NZS1d1NEhUNjFFdlNSOE5VRGhJQmpLd2JORjFqMjVWeU5HZndBNmttcnR2SHo1TUtFamQxZGZPRGo2SklmbzNadnhoZTZ4V2djNjFmV21PbWwrbGxTc1drM2ZMR3o4ZURMRlgzR3dnTUR6Nm02bjh1WHE5bDZDRlk0Qm1XUzBtOVBXVmxXYkFOVnQyZTlQMU9SUmdiVjh6LzkxLzYyN2FIakwxU25YakhKa09pR1JsQlF5Umx5ZDlIWHpRemxxTjNCcWVHbStBVkJMQXdRVUFBQUlDQUJObXRwT3NsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBRTJhMms1b01pR25TQUVBQUNNQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVEl1WTJ4aGMzT1ZVVXRQQWpFUW5zcGpBVmRSZkNUR3F3Y3hoaW9xRndnWElvbG1OUkdRZTlrZG9HUnBzZHZWK0xNOG1YandCL2lqakxPckoyT01Uakt2YjZaZnZrbmYzbDllQWVBVXRrdVFnWW9ER3c1c01zaTNwSksyelNDelh4MHl5SFowZ0F6S25sUjRIYzlIYUFaaUZCSlM4YlF2d3FFd011bS93S3lkeW9pQmU2RVVtazRvb2dpcHJYbFM4MFVvN0ZpYmVZTUhPTmM4OG5rUDcyS01iRmVibTFoYllhVlcwZDV4dmNtZzJKY1RKV3hzaVBMUzAyYkNIM0IwTXVOaUpQbmdjWUU5SEtOQjVXUHIyekFReEVNTEVaOGdLUkFXQTM0cmxhMmZOWnB0SWk3MWRXeDg3TXBFN001UEFtb3pjUy9vM25QbGh6cVNhbktGZHFvREI3WmN5RUtPd2VGL2JtR3crNHQ2QnRVL2s4RVJMTkUzSmNiSVNRcmxQRldjY29Ma0RwNkJQVkd4QkE3RmZBcDJvVURSL1Z5QUlpeW5UOTEwYXdWVzAxeUd0UlJkcDFoS25SR2FXT0VEVUVzREJCUUFBQWdJQUUyYTJrN2tmVjd3UndFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjNVZSUzA4Q01SQ2U4bHJBVlJRZmlmSHFRVFJhZzhvRndvVklva0VUQWJsM2R3Y29XVnJzZGpYK0xFOG1IdndCL2lqajdPckpHS09Uek92cjlPczM2ZHY3eXlzQW5NSldHYkpRZFdEZGdRMEdoWlpVMHJZWlpQZHFJd2E1amc2UVFhVW5GVjdIY3cvTlVIZ2hJZFdlOWtVNEVrWW0vUmVZczFNWk1YQXZsRUxUQ1VVVUliV0hQYW41SWhSMnJNMjh3UU9jYXg3NXZJOTNNVWEycTgxTnJLMndVcXRvdDk1a1VCcklpUkkyTnNSNDJkTm13aC9RTzVseDRVaytmRnhnSDhkb1VQblkrbllZQ0tLaGdZaFBrQVFJaXdHL2xjcld6eHJOTmhHWEJ6bzJQblpsb25YN3AvZVBadUplMExybnlnOTFKTlhrQ3UxVUJ3NXN1cENEUElPRGY2ekNZT2NYOFF4cWYrYUNZOGpRSnlYR3lFa0o1UUpWbkhLQzVQZWZnVDFSa1FHSFlpRUYyMUNrNkg0T1FBbVcwcXR1T3JVTUsybXV3R3FLcmxFc3A4NElUYXo0QVZCTEF3UVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFM0xtTnNZWE56bFZKZFR4UXhGRDFkaGgxMkhXVUZSQkUxUFBDd0MyWXJxUGdBMlFjM2trQldFL25ZRjU2Nk01ZWhaTFpkT3gySVA4c0hZK0tEUDhBZlpid3ora0NJTVpDbXZmZTI1OXllMC9UbnIrOC9BTHpDc3dhbXNOaEVnSWNoSG9WWUVxajdNNTJ2dmhCWUgyZ3JKNW55cDlhTnQyUkNZeXZ6V0I3UXA0Snl2MnZkeDhKNjViVTErVGJUZHJUUnZpZlFiZCtDMXhrS0JIMmJrTURzUUJ2NlVJeEg1STdVS09PZHVZR05WVFpVVHBmMTM4MmdsQ2NRN1JsRHJwK3BQQ2N1dXplL2MzWGpEY3R0SE9yVUtGODRicmsvc0M2Vmx6UjZlUzdWU011anp4TTZvRk55WkdMYXVYYVlLTzdEZ0Z5bXhBcVVwMFFlYStNM1gyOXQ5N2h4ODlBV0xxWmRYWXBkK3BlQTdybTZVT3ozbllrem0ydVR2aWQvWnBNUWp5TXM0MG1FYWRRamhIZ3E4UHcycmdTVy8rTkRvSFBqWmdJektmbXlabHE3ZmZLMmMrVVJKczU2Rzl0TXh0WVIwOGVNNnFzc1krOVQ3YzRRSy95akF2NWNvdFVxblpRWnp4QXpIQnVjOVZEakFUVFgxcjlDckgxRDdRdFhOVFI1clZkWWl6dThMdjVCSWNJOW9NcW1xL01Bc3hXK2hmdFZuTU04eHdBTGVJQzdGWTZGVkF6OEJsQkxBd1FVQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJPMVhUVy9iTUF5OTUxY0lQU1Z0bHJTSDdWSmtRTGVoUUE5RjF3NDlEZHRnVzNRbXpMRmNXYzRhRFAzdm95VExrdndScDFpMzAzeHBZMUVVK2ZnZUtSY2lXbThpVXZLTVVTWjM1T3ZwNHZYaTdId3ltU1E4bHlKS0pMbURod3BLZWNuRmJjVmxKQm5QUy9Kck1pSDRMSS9KSy84aGQ1ZTM1SnBUeUZydmo1ZG1BK1RWUmhsOVFrY1Z1cm1EQk5nVzZKeDhnQ1JqdWZwUEhRTWZCZDh5Q3ZUSjdDdWxxUHBqd1ZCSS9jUTdDZVhaRzhMb09Wa3V5WDBKYVpXUmxBdFNDQ2doVDRCc1FiQ1VKWHBuczY5aXVTU3NMQ3VnRi9LOGVZMW5zbnhOcWpoejcxem9wZjVqVnVvZ1lRdm9DRTFzVmxNWDBUdzhaZTU1bnltNGU5SFVTSXpqcWMwc29qZHBDcUtCTTRUUCtQdW5nUG14K1pENXg0djA0WXE2MXhHbGVEcWFWMFdSTVJBOUdHdXZEY3AyQThzcFBBSnROczdERTl6UEI3WDlhcVFtUVVVdE8xL3FyT0dhS3dVcHZHQ2c0dHBOZ1NHeWhPU3h1RWx4QTJKcW5DM0pkVlNVUkg0SHJDbVJYUCtIQm5wMUV4VUZwdGVRY3ZXMlQwOHpsVUE1UXNsbkJhaTM3QTlSZ3pRVXBONC9NemJEZ1NuY2tpZ25QTTkySkFZc1RMeGhVbUtKNGgySlNGenRRQXhFYkd0YUNMWlZlV25iT2w1c2cwWThYRXhuTmkxUFFkcnRpbXpLOVFJRlExdHNUYXM4MFUxcURmS2RNcjB3UnpsWFd3WS9pUUJaQ2V5cWxsMHo3d1N6Wm1QeWZHODRSV1hpNlNwajdYd2E3bnVvbUlDcGk0eXNWc2JOekdudFcrTnlHTldNcnpIUWZ1ajhCTkhXYTNnREdmYjNrSG03aDJ4Z3c4Vk9LZEV0dFh1dlh2QlQxdHo2b1VvdndES2Z3Q01yWmRtQlJaSDhNNk5mRmtoQ3hBWGpyUXV1SGhzV0Z0YlpkZG9kQnVjYkJHM1BST2d2OTh5TEJqekQxUkMvb2Via2tHa1FiZ2pnWUk0NXowYWhZYVduRXEwYmppMS9ES3JUeDFNZnEyQlZUWktlRlFkbkYwVWZQelFJVUd5Qmg4c05CeGEyKzN1aE5PM3c1TVQ1QU13dm1Na0tXb2RxUFg5ZHpscHRxSGdZVVlacGhJZHFRMXYvVlhWMEI2MWJDMGZUNEtBZEY1VHV3VU9TTWczNkVGSDVsZ095OGt6NmhlVVp0TzhWT3MzUXBIWEZzQm0zL1BSZE9Gb2liUmV5TS9jUFZ1M3p0THF2amVtVExlajZoNC83UUJFUEZIK25xQzM1by9mM0F0VFVkSzZqSE85Rk9ERHhFRGxJdHA2aHFSNTNIaG9Zc0R1Q25mdGtYOVFYM2hwKzY3NFY0MzFCYll3SkZ4aEl3WE9xQ21NdlJ6VnZHakI3T2s3d1hkSnVPK2FTMDJrODRVWFZYUmJyYUovZGl3SkdVbk1wYmMrTmZZVDh6NzQvWTkvUlVVaSsrcnZnUmVqSFVqTHRvMkRmMVBNcmRnQjE3ZWVMeS9UcE1QNzZuejU3MlR0QzNLZkpiMUJMQXdRVUFBQUlDQUJObXRwT2xnQUJZYjhRQUFBVExRQUFId0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzUEZXb2Q3SE1kMWYwdVVCVTVIbTZJRVNTQmxOZG95U0JHODdRVlVaWXVnZ0tSRTBsUW9LYkcyZ2ljZjd1QzdBeVU2anUwa1RuRjZjeElyMVhJU0pYSnN5MHBDUWxic09EMXhtdE43cjM5RHZpOXhmbTltOStvZURxTDhmUUY1ZTdPemIxNzl6WnMzZS9PRi8vM001NGpJb3Y4cVVZWENFa1VVbHlpaGxGdXJKYnBJMVJJOVErOHFVWTNXWnFsT2pSS3QwN3Y1dHNrUFdrelhacm9Odmx6aXk3UDg0TGtadWx5aTk5RFg4dVc5UE9qclN2UStldjhNZmFCRVgwL2ZNRXZmU0I4czBUZlJOOC9RdDZqMHJTWGFTeCs2anI2TnZuMkd2bU9HdnJORTMwWGZ6WmZ2VWVsN1MzUVg2L1o5OVAwbCtnSDZNTGQrOERyNklmcGh2bnhFcGVlNSswZjQ1a2RWK3JFU0hhUWZWK2tuVlBwSmhhYnZyZGFyN2ZzVm1sallmMTZoeWFPTk9GSG96U3ZWZW5KcVl5MU1tdWVDc0lhZTNTdU5LS2lkRDVwVnZzODZKOXNYcXkyRjlxNVVHNVgxV3RCT0c4MDFweEluYTQxS0s2cWNTMXJ0d3lCYUM2cDFoVzVhZUhMbG1lQlNVS2tGOWRYSzJYYXpXbDg5TEVRR3pWVXd1YUhnc1VJek5SWjdxdkdzUXZQeWVidTZsbFNFTXNlQ2RuSU9keUJUcWhBZ242OEY3WXVWSTlYVjVYbzdXVTJhZURoUkh4eitSS09leEQzRGQxUXh2cHkwTHg2dFZaTjYreDFuVnRqZ0FuV21uazFDOHhtRjlxdzBtcXNWY1ZOWmJ6YmFqYWhScXp6T3R5QzZMbW9tTWRoVWd4cnN1cTJITkdwZVhtODNLa2U3ejBFK2ZXVDUxRU5uTHJBQ3o3V2JRZFErZmdrUEZYcDZvV2RrRUZZcmNkQU8ycGZYazFaRlVCd2VWckRBd1FNOHhNanpRVzBqWWRGVGw3alZyMk8vcEhPNHNuK1hRWnhJdlc0Zm81WkNzN1hHNnJuR2VqV0MrU3JhOEhRQU85dFoxMXhTajRDeVdKQ2ZyYTdXZy9aR0UxcnNyTmJqNUxra2x1b3B0RXVhczlHdTFpb3JWWUdsWGZWR2ZibWY2dnBzMUtOQk0xaEwya216eFZEb0F5dVV5d0NyRGJDOGQydkQ3NGZJMDJPR01PR1pKRTJhc0NvWnk0ODU3anpiRHFKM25ReldoVklxTGFuMFVaVmVVT2xqQ3BYT05qYWFVWEtpeXRyTzhndzZ4T0xMcEpHdTBrK1Y2UUg2YVpWK3Brd3YwcytXNmVmb0paVStYcWFmcDArbzlNa3lmWXBlVnVuVFpYcUZma0dsWHl6VEw5RVZsYTZXYVpOZUxkTm42T1V5dlVhL1hLYlAwdWVZMGErVTZmUE01YlAwcTN6N0NVaS9qTC9Ga3ljWDQxaWxYeXZUcjlOdmxPazM2YmVZdzIrcjlEdGwrbDM2Z2tJSHo1eDQ3RXdTSmRWTFNid1FYbTRuTGQwNXVGR3RINm9nMkhmZ3IyM1l6c0dXUU9CK2xYNnZUTDlQZjZEU0g1YnBqK2kwU2w4czB4L1RueWgwODhWMmUzMnBVdEZkNDVCdUh0SU9HZHFTWjF1MlF2c0taaGNUVng3RzVXelN2RlNORW5ZSmRQclRNdjBaL2JseTY0T081bW1PWm1tMllWcWVwdHVPcm1tNlpydU9wdUZKR3R1aGplY2FudGtXdm5WSEMvamV3SmVwKzdwam1ycnJhemFQaTVNRXZERGVOSGkwNmZNMU5kT2tLNE01bVNCaEtzKzFYVGVDc0d2OEV6SnN6WEpNelVzc3lFazlYYmNFNThoMklkSFU3Y1JNb0tMbzFlRWkwV3RHYVdyRmRpUjZEY2VRdlo3bnVWWm9HTEkzREdSdkdEbVJIVWFTcitrbHNqZldMVDN5VFUvMGdxdnNUVjNUOTZOQWs3MXVScHNHV3FUYnV0VEI4azFRaDEzZmRuM3Vld00rUjErVWVkNTArTCtod2I2TU9rajdxVTFieHNicml3MUxqQ3piWVlud3Z1NXBudVhwSEFVRDFFd3J2azBlQTk2NjVCM0Q5alRoTVdtcU96MzBvSUVQRE50Z0x1alh1ODk4M1lac1cvY3puajd1UEZOdzF1d1FyVnh6WFdkdllhVEc0OEZONi9CZzJXbksydHFhL09lTEQ5TXlYNTIxeWJoWUlwWVliYkpVSjdNQ1hCaGNqS2pNQS8wYU1tZmZ5cm5iV3U0VkgzYjVRR3BQUE1CektCNjY1NDJJaCs2NjI0eUhIYVY5OFhBSzRpSEdkdUtoQjhhSWVGaE9PdTVQU04wV1ZROWZjMmllTzhNOWhiaHdyaGtYaG1GdWdRdERDN2VGQ3dOUHJ4VVhUaGNYWTdCaE9Na1FOb3pBNmNXRzA4V0c0ZGxEMlhRQUdaNXUycUIzb0poQWxZWjdINUxSSS9UZ2UzQnlZVitHSGVGVDRFTzMyZS9zWHc4ZmlVcjJTcisra1ROT1g2OUgzemp1cFM3UTFzaTBOWWEwMVlWdWh1alJ1eEh5UkV0NFJUeHpyRzdXNytBY25IdmxNcVdNSGJkeUdpUHNvOUZZY2g1SHo1THhoc2N0SHRFbnhVU0hLM2xZZmZiNUVwTUNSNXIwUDhmYzBuTDBDUno0bVFXOGh1RzU2UnZTdnQ1WmczL1ExYk5Nd2QwM1dDZjJDK0tETzk4V2Z2Zk51RGNEY1R3N2NUTDk0SFhneWd6MThYRWF3SlNlUjhUcDJMTlZSQkpqZkVSUzZ3MUh4TktkLzhlSWhQN29pS0MyR0lxSTVVUmM2MmhKLzF6Y3hqeTB2T0g0WnR4MHExK3VudzVUQnA2Z0RIcmxEdVpsV0djZ3U0M1VwUUFsOEpESTd4M2ZTWjl6Q3pKMHRDem15cGp4NFV0dWRjWWJjdDdMMmliMXgrRFJrbkpZcjY2Y1hLckYzS0cvSVZZSXJ0WjRKUHVWVjBiYjhoeFlKUEtPWEJYQlNGU1pNRXprSXRZUjNnUm1HQmZRazJlTnhkbVg3NWdNOGViS3hiSU56dlZBQXNhd0pDREV5UHh1KzdHbzJuaE5ZWi9iTHM4QUlZMjFzaTFHSWI0Tk9hc1lUOWtvUjg0UFg4d3VUWk1ZNUpiQnExVUlHMFhsSlo1bWMxQ3UrVHdQbUlmSEs1Y2g0eVZXTk1FdFgvT0d2UWw3bkNKL1pyNlUwb1VmZmN0SEZtQzBNNTgweFVoVGVFelA4YjR0VkpoYm93S3hFNTh1SHhFUkkwTUh1c2VnWTlBYUlTKy9nMFU2ZTBkWXBZc1ZQa2VJSVdLWUk4UWNpUkNlRzJZUFFteUJFRnVUNCswZWhHRDJvQnJYQktiMEFZUTRRZEtIRU1jenQ0RVFIdlZHRVlJWWJvV1FRb3hnWithN1JYN2x6SkFqeGRlTnJKb1NIdVc0aWpaUTQwRmJWNkpHclBpT3RGUlFXSDE1d003bDk5YUkyTzFvWTFCbWJpLzM5R0JLNzJES05ZMHhtQUxvaXF6dnpoRzd6NG9NT2E2ZDlQUE5jMjBrdk1UNEtNSXZlMGhnUU5aRkdtY2R6Mlc1cUFCMW1kV3c1elVrNTZ4ZTlyUnM3WkFjd2RQajJwK2o0NFdlaUIxb2ZhNkdUWk85eTIzNTNMZXpjU2I0R3h4clNIVkU5VzBOZU16aVhPRnpsV2JyTHFqUkV0bVU4NkxvUlkvSk92Sks1Z3ZmSmo3N1hlWlBPUk1FSnJFQ0dZR3N4Zk42VHF4Q1pwNm54UzdGbHpzR3J1ODcxUVFVa3ZzWStGbThNYkJsWlRqRXdkWEc3VmZrdEpKWTdMTVU4enRiQ1F5NTBtZnZKdUMzRE5WNkYrRkNsamwyYzlTN2t5cGNiZnNsYVVYMS9TQUtSMlJxdWNQcjI0MTdnUzY5cGx2eVBwYVkzK2JhMmovTHBaemVLSFUxRi9QSHlOL3ljS3pabXQ0cVkyQm11YkxPa0JpVk5TRlhZaUtLdHNCblFYM0M4OTNYWFJTTnBwYTREbERrYXJvUjZ6cFVSTFlKUW15a3NkZXpUUXMwdWh1bG1wRWttbTBhRWZKSWJNVlJiSm1oNzJwK1QzWGppQlNQWGJKczhUdVdubHF1VUhmckRXUWQzeG0zUDlLSzE3SXhXY2YzL1d2SU9tNWgxdkZFMXNHS21MY2xMakhXN2NrdVRwWmR2SjdzMHNrK3ZwWHJMaXNtcmpmQTN4NlJYM2lud1Y1RDBFQnZaM3R2NkRLVVdRSzVjL3d5WnBiQU5Jc3ppNmQzZUppZW5uUHB6eGQ1cGJDOXJOT3BuWGptdTJJdkliT0xLV3pOczB0bmxnM2tDNHN6d2V2Sk9WbDluZWVXd2VqN0hQMWhKSGRyYXNZRHIrNitNK1JEcm43MTNBWXZ3N3ltWi9jVzRpWHJHTU9MZWFZTCsvaU8vUmpJdkNKM2tmS2RvZ2NJd0Q1RHpFQit5Mlo0bnVoeGVlVnhVenNNZE04M1RRc3dDSk0wQWFRYzB3M3N3TFNzQkQ3RjB1aTREalkrV21BblZoTDVwdVA2aGh1aEJFbVNNSFd4V2tYNEpQakU4dU56cnVlcU04TVJvOTBYNk9YcW56OTliNWhDOGY1MzFCdW0wSXkyOVlhSjY3UnJmY05rajM2LzFNbGU5dUJlbEJFbGtLVDVCUldXS2Q4cmg2SDd1aXNoZlJzNUtVek1jWHU2SElFamQzVkFGZWNsZ1M5VFpodzVIcm1HczRVSnRPVnJodTN4S3d0ZGk0d3NSNGlJMnNQNVlkVDZ0L1U4S0ZyL2hNd00rMElYWGV3aUdMOHlaN2c1MW4yUnp6aXJjT1VtNWtlZXdReFo0N2xwaE9wRnM4TEVjMXpOUWYwYlI1SG1HRTRhV2w2Q1pTTzB6VENLb3pTT2tKdkRXSFBTMkFxeHd2bUJGME5rR0dPKytOMlB3SGUyRXZXalhLNStoVGlQSW04TG5FZWh0aTJjUjZuOTVYL0RqbHBHb2h5enRnL2htdGo3eUxiUjA3WUtmblBDRTErVHU2azh4M3BDdjk1OVgvYk9tbmRMVnRGK3EvdHVTZXdDMlg3czhUcTd1aGlWaVN2dHp0Nk93d3Y4MndYWHp2d2NKVjJtZ2FiTGVvbWZZTStjUDNYbG13dEJrNjlUb2gvck9LL2xkbmQvMkxQakE0MGJaeGhITzdEa0xsMjBQZGt2YlJlendlV3gvTTROY2pNSlFmNDJUcGZyaFloNXpMdlBOTUhDYXp1R0crQ2ZZV284NlRRek5DSXo0TmN1bG1NWkJyL0U4U0luTk8zWU50SWtBaGpzVkV0U096VTFaRi9Ec3RJd2NnTXJ0dUFjRFVrRkRsWklPYWpTUjh2MEYvU1haZm9yK211RmJ1ais4dnRRc3hsYzVwOS9WWHFoVEg5RGY2dlMzNVhwNytrZnl2U1BmUE94TXYwVC9YT1ovb1grVmFHOVcveENYS1ovbzM4djAzOHcvL21Sdjgzemo1di9DWUtSNXlvVTJ0WDlyZjkwK0V3UzlYZkpuLzhWZXN1V3Y5VXI5S2IrSDdjVnVubkVJUXRZdGJCL2l4TVl1L3BQVnl6SEN1MXNYVzYxazdWalNScHMxTUQ2eGo0R2tvclBQd1J0Yml1MHVERDhlSEJFNzZtTm0wYzhVbWkyM1ZpdXQ5b0JXempYSnpYcnh1anJoem9WS3JjYng5Y2IwY1dUMVZxdEtvN0VQQUsxaTQ2VktLU0tzeE9uVTBScDRaSDlvODZlOUlaRWVBTmNHeHVzbGh5QkFEK0tTTFVScnlSWU81eGpycjhid3RiNXJsWm5jMVlHQXk5TzBjeldHdlhWOC9JNFI3bVI5cHB4VTBlL0FSZk1OdEtPNlE4dUZKQnNIWTlCQ093ZGltOXZ0TlRWSkl2ek5ZZ2FaSFpYOXhIUGphQmR5UitlRUxkdGpoRE1lMVEwNFRadm9laHN6SGd1akUvNVRDRy9WMitFY3IzUkRHcVlqYkx4VUJRbHJWYWptYlB0UHpnMFZ5UWZZYnV0Y0lhZk9mSFlXVXpValJha1g4ck91ZXhiMlA5azhUbXJEalhMR1RwczlIRFF1cWhRcVhVeE1QT2tjUGRvWi9ScnZiOVlYdkp1YU5TR2p4N2JhRUJ3dFZIbmN6aDhLT1Q0MGVQTDU0OGZlK2Z4ODhkUG5WTm9UMEdDT3k0Ty95QTgwL0lZa0VMbXVJTk9oYnJkTXVvRWxrSlQ0VWExaGdSMDM4TElZMXJaSVpLKzgxRkRCN21tV3V1MUtnTC85aUovRlI1WG00WnJ4S212d21uNkJISVdac0dwemhtbTNqTkx1L1BaMDN2ZWFWKy9ZMDVzMUNOMjk1bWt2ZEdzSDB0eVQ4YUo5S1JWb09nZzB3SXBOMEtwQW8wbVc5WDNKQ0lMTHVNS0dqWnJlZit3WVZCZWF0QjdORXVoMDBYYWJMRTBEaDFXR3pxR05oSEVNYytFUVJPR2JEeFBkOUlocWhEL1RaRENwNmR3TlhCWHdiZUM3NmtEVjBuNU5Cbzd5TVIxV25UZVNoYXVaVWxBTmpuNG5pV1hQRGxZV1FPeldmUjlhcE4yck55elNSTlhhUElLVFYyaDZVMVNUNzVDTS9kY29WbDhIYnhDcFUyNkRnU2JWRWJYSnUwOHRkZ2hYSm9FeWFLa25KK1VwTGg5MHlhOVdYWnUwaTdaMkgzOUp1M0dveHV1MEkyaWYyN0N5SjdjdEVrM3k5NVg2SlpObWtkNzk1NmxxZGRvNzRYNXFhdDA2eWE5WldsYVdWSjMzN1kwMHpYekVkcU42MjAwU2JmVEhOMEJnKytFUi9iaDJWdnBBWG9ibmFDNzZVbGFvSmdPVUlzTzB2dnc5RVB3M29kQjhSRTQ1MFU0NVNXNDVaTndDcnZxS2VrTzhta0ozNVAwY1RwTTk4SlpjL1E4M1VmM0M2bnZCZWNINGJnSGFKMGVRdDhrT04xRVIrZ29YUHdpemRBeE9nNzN2NFM3RS9RVnBJSzNRZy9qNlF4NEwwTmo2ZnIzWTF3Sk1qYnUyWDM3RmJyajFBSFl2RFM1T0dHd0IrOThucWFVbDEranV5NWNwWDFMVXdjUFhLRzNidExibHFiUnVIdEpuWEJtNW1ibTFWZnA3UXE5UUFjVzUyWW1uemJtMWJtWlYybGhCMzJlOW0vU2dhWForYW41MlZmcG5oMzArQWRubEJlLzlNWFg2Q0JjT1Q5OWxSWmZGc2F4QXcyZ2cyQ3NDa04zd3NSYllOQWVtTFVQQmkzQ0ZCUEdISUVoRjJCS2hIWVZCckNqVWloL0FaK3ZwQldZNVlEdVBqb0pFMkVRbmFMVEFxZ2I5Q2pNVmtUck1iUjJRRXFkemtEYUJHUmRwTFBvbTRTa00zU08zZ0YzTGNKTjU5R2FCcmNqOURoYUtuMFZSdDhCZWtsMW9VTjFvVVAxQktpZUJOVWhtdmdmMnFQU1V5cDk5WmRvTDgycTlEVm9pdjlQaWVzNzVYOG85Tit3VzZHbkJZeUMvd05RU3dNRUZBQUFDQWdBVFpyYVR0M2RzMUZSQVFBQUxBSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE1TG1Oc1lYTnpsVkhKU2dOQkVIMGRZeEpqM0RVcXVYb3dpazVBRVZ3SVNqQWdSTUZFUE9UV21hbkVEcFB1MkQzajhsbWVCQTkrZ0I4bFZrWlBJcUlOVmErVzE2K3I2TGYzbDFjQXUxakpZd3lMV1N4bFVSVElIQ210b3FwQWVyMWR2bWFvbVlBRVpocEswMFU4NkpDOWtwMlFLL01ONDh2d1dsbzF5citLNmVoR09ZSENtZFprYTZGMGpqamRhaWpqRFVNWmRZMGQ3SGtCRFl6bmZLOUp0ekc1cUc3c1pXd2lHU21qM2RyK29VRHFvU0lnMmdJVExkWFRNb290U3g4M2pPMTU5OVRaNlh1eW83eXJ4eUUxcVV1V3RFOUgzNXFCWkQwbU9POGtDQ3c1ZDFobDNYekx4TmFudWhxTnV2clQ4OXQ5ZVNkNTIxUHRoOFlwM1R1bjZNWUVXU3dYa01hNHdPWS9OaEVvL1RLeVFQblBXcWdneFo4ME9vS05KMkhNY0hUQTlSUmpacVAwRFBIRVVRclpVWjd3NnNpeEwzNHlNSUhKUkNHREFxYTRuOFowd3AvQmJJSnptRSswRjlqbkV4UEpUU0QzQVZCTEF3UVVBQUFJQ0FCTm10cE9FL1NieG1FQkFBQldBZ0FBUndBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa1UzUnZjbVZrUkdGMFlVTm9ZVzVuWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenBWRzVUZ014RUgwT1IwSUk5OTBnZ1NpQUFoY2dHaEFTQkpDUVZpQVJsTjdaSFRhT3ZIYmtkY0wvOEFkVVNCUjhBQitGbUYzUzBFQkI0VGVIbjJmZWpEOCszOTRCSEdHampqRXNWN0ZheFpyQW1IR3B3RUhrZkNxZnFIUFlrMzN2Z291ZGtiSHpKRE1LWFpmazBsUGVkelluR2JuMFJLRG1UTkpXWmtBQ3ExRlBEWlhNVk9qS0M1M2UyRUFwK1lKajZXbkVtVHpWVm9jemJyZTcxeFlZYjdxRXMzT1J0blE3eURya0gxVEhjR1l4Y3JFeWJlVjFFWStTNDZHcmM0SE5WbUJCeWFVS3F0bFZOcVhrYWtnMjNJK0VDVFJ1ckNYZk5DclBpZm5OU0R2Wk55bzhPcDhkeTRReUovTll0blRXTjFUVVVpbnQvRjZUaDZpMzNNREhkSzFMZVQ4ZUh4UnpOekNGZWhYckF1Zi9iaWN3WDY3UzhKVzg2L1FvRGdMYmY1ZkZGaXI4cCtERDI4SUVlN3h5VkV0YkcxbFJDR1djNWtpV01UQ3gvd3J4d2s0RkRjYkpNdm1NR2NiR053R3pXQ2p2RjB0Y3dqemJva3dGSzVqRDFCZFFTd01FRkFBQUNBZ0FUWnJhVGhDZnpNOVJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTBMbU5zWVhOemxWSEpTZ05CRUgwZFl6YWowYWhSeWRXREN6b0Jnd2NUZ2hvVWhDaTQ0TUZiWjZhTUhTYmRzWHZHNWJNOENSNzhBRDlLckl5ZVJFUWJxbDR0cjE5WDBXL3ZMNjhBNmxnc1lBeHpXY3huVVJISU5KVldVVXNndlhLMWVzblFOZ0VKbERwSzAwazg2Sks5a04yUUsrV084V1Y0S2EwYTVWL0ZkSFNqbkVEeFNHdXk3VkE2UjV4dWRKVHhocUdNcm8wZGJIc0JEWXpuZk8rTWJtTnkwYUd4cDdHSlpLU01kc3YxaGtEcW9TWWdyZ1R5NTZxblpSUmJsdDd0R052ejdxbTcxZmRrVjNrWGowTTZvMnV5cEgxcWZtc0drdldZNEx5OUlMRGtYS1BGdW9WekUxdWZEdFZvMUtXZm50L3N5enZKMng1b1B6Uk82ZDR4UlRjbXlHS2hpRFRHQmRiL3NZbEE5WmVSQlZiL3JJVWFVdnhKb3lQWWVCTEdERWM3WEU4eFp0YXF6eEJQSEtXUUhlVUpieDg1OXBWUEJ2S1lTQlF5S0dLUysybE1KZndTcGhPY1FUblJubVZmU0V3a040SGNCMUJMQXdRVUFBQUlDQUJObXRwT2NadEprTklEQUFBN0NRQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjNjFWNzNQYlJCQjlGOXRSN2FpdENVa0twYlNsTmFuai9MaVV0SVdTRUhBZHB3MVZISWlOUzRBWlJwR3Vzb0lzR2VtY3BIOE1YNW5oVzJGb1MyR0c2V2YrS0lZOTJjUzBNY1FaYW8xUDB0N3V1N2Q3ZTA5Ly9QbnI3d0N1NGFzMFhzRkNCcU80bHNaVlhNL1FjRVBEdXhta2xDV0Y5ekxJNGVZSTNzZWlocVVSWlBDQmhtVTE4NkVhUHRKUXpCREVMUTBsRFNzYXlnekRzdUZHdVhtR25PRUd2T1daOG40UU5tOXdXelFESGxtODZqWmJucWpLSURRZHNVaitTNjd2eW1XR0svbEJBcWJxRE1sU1lBdUcwNGJyaTBxN3VTM0Ntcm50a1dYVUNDelRxNXVocTk2N3hxUWl4S0N2K2I0SVM1NFpSWUplSndkWUxIZWQrS1hNVnN0N3dIQmVHWVc5WWtxejFEQjlSOWpsWGVITFRSRzFBaitpZGFLOEVZUU8zeFBiQ3p1OEZRWXlzQUtQV3hURW0wSTJBanZpWWRlWkc0R3pPRFVJZy85ZWxPZ2x2TUJobUR2ZTBnd2pRdUhVVGE4dElnMjNxWFRsbnVHZUt4dUdnaTM4QTFidTgxTGd5OUMwWk82d0wwR2VsQTlhd3U3Vm8vUlM4cHZNR3p2bXJzazltdVViMnp2Q2tsUzVReWFHVEhuZkVpM3BVcHlHT3d6cHF1djRwbXlIUk9YN3d3R0tYQ2dvR1hkWDdQUDdiZCtLUS9scTkybnBlQlY5Q2JrdXF5U3FRVHUweEtvYmQvTno0WE1xQldyNnNtOTVRZVQ2em5yTVE4T2Fqbzl4VjhjWXhuVk13TkN4am9xT0RYekNVUHpmdEhTOGhVczZQc1dtaHFxT0dqNWpPTmNyamJudGNwdEMxZDVIdkVhampqcnVNWXpGRlcrYXNzRnZ1YzZhTDRValFoMmZZMHZIRjloaW1EbE9mWFdjeDBXU2xFSE9MRVAyeGQxbXVIREVkbXY0a2lFL2FMY3p2TnBiNHFEdkdDNGR6WStFSk9wYjhGVXYyT3NJbGpHSWtIeExiQ1F2eXdiMWloUmhSMDE2R2Y2TnBoUWlyelR6VExXMnNWbGVXU25XaXFVN3hjcnQ4c3JYNVhxNVVxUFNHUCsyblRFdjFaV21aWW1JUkgyZVpQMjdnV1Q2Q016akt1VXhaQ2pyQ0xubTIySmYySjBwT2tqNXJtSzBwZXR4dzQxVVVxZWV0MUNkS0pCaFBML1dWMTVPMEd5TVI2MmQ3KzhSZUhiWFk4TG8xLzNLeHhkN1haL3h2am5oSW4xT1IwRU5CcGJOcWpOTkgrb0UvU2R3aHF5djBkTXlodWdDTW9YcFIyQ0ZKeGo2a2Q2RzhEcU53K1FET0RnYlI4UmVlQU52QXZHVFFtTjAwVm5xWXYxQTJFbTZyeGQrQnZzSmllbGZrRnovRGFtdEp4aXV6QksrTmp2ekdDY1NUNUVld2pOa25tS0UwVjEvaEpQeFJQTHd4S25aaHdkMHpoSWhZQWM2dnFIRlBiSTE4UTU4M0VVUVV5eDBGaitndUs3RWhxanBLT0l5SmdsbEREZHhCWGtrc2tXaVBVVVdSWHVoVzRKMFlmb1pUajlHOW1IZkN1anhjN29MWDZCL2tpelROTTdFL3JPWWkrOGM4L0hjVlNKM0xxYWRvRjNvL0ZKa3ZVQVlPYXppYmFUL0FsQkxBd1FVQUFBSUNBQk5tdHBPQ0swYVRFY0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QTlPS05BUnlqS1dCSUtMOHAxZm5sK3Q1WGJYWE1mS1lqUElaWDc1SVpra2hvT0pJTzhnYVRLNUI1YjhTK3YxUkJKTlc0Wkd0a1RMYzk0UWRRU3dNRUZBQUFDQWdBVFpyYVRoeit6dHlnQVFBQTV3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjNVZTUVU4VU1SVCt1Z3c3N0RyS2lvZ2lhanh3MkFXelJUUmNJSHRnSTRsbU5SSElYamgxWng1RHlXeTd0aDBOUDRzRE1mSGdEL0JIR2QrTUhvd3hCdEswNzczMisxNi9yK24zSDErL0FYaUZweTNNWWFXTkNBOWlQSXl4S3RBTVo5cXZid2xzanJTVnMwS0ZVK3VtT3pLanFaVStsWWYwc1NRZkRxejdVTnFnZ3JiRzd6SnRUeHNkQmdMOTdnMTR2YkZBTkxRWkNTeU90S0gzNVhSQzdsaE5DdDVaR3RsVUZXUGxkRlgvM293cWVRTEpHMlBJRFF2bFBYSFp2LzZkNjl0YkxMZDFwSE9qUXVtNDVkdVJkYm44VEpPWDUxSk50RHkrbU5FaG5aSWprOUxlWDRlWjRqNE04REluVnFBQ1pYTC9JcEIvc2JNNzRNYnRJMXU2bEE1MEpYYjFYd0w2NStxVFlyK3ZUVnBZcjAzK2pzS1p6V0k4U3JDR3h3bm0wVXdRNDRuQTg1dTRFbGo3ancrQjNyV2JDU3prRktxYWFkM3V5WDd2ajBlWU9SdHNhZ3VaV2tkTW56SnFxSXFDdmM5MWUyTTg0eDhWOGVjU25VN2xwTXA0eGxqZzJPSnNnQVlQb0wyeGVRV3g4UVdOUzY0YWFQUGFyTEVXdDNoZCtZVkNnanRBbmMzWDV4RVdhM3dIZCt1NGhIc2NJeXpqUG03WE9CWlNNL0FUVUVzREJCUUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpjdVkyeGhjM090Vmx0ejIwUVUvamF4bzloUlc5TmNXa0lnWEVKd25JdENBZzJRRXNoRkRnYkZJWmU2bEVLTExHOXNCVmx5cEhXYVB2UEdJODlNbjNqaHJUQ2twVEREOUprL3dneDMrQUVNWjJVVDA4U2R4ak94ck5YdStjNStlODdSMmJQNjhaL3ZmZ0R3RXNveG5NT3JjWnpIYXpITVlEWk96VVVGcjhjUmxaSW81dUpJNFkwdXZJbDVCUXRkaUdOUndaSkVkSW1rRlN6THdWdXl5U2g0V3o3ZmtZMmhZQ1ZPNUZrRnF3cmVWYkRHMENGS2RqQTB5VEJxMko1V2NVeXg1Zm5sQzFxQmx6MHRzTFIxdmxQbGdVaDcvbHJWRTZhd1BUZVlwV2tYYmRjV2N3d1R5UmJtamVRWUlvdGVnVE9jTVd5WFo2dmxQUGMzemJ4RGtyT0daNWxPenZSdE9hNExJOUk4QmpYanV0eGZkTXdnNERTY09QNmFRMU16Wkc3VXJGU2Ntd3o5RXVEcjNPTDJMaS9vdTl3VjZ6eW9rQjZ0dFpzMFBMK28zZUQ1NlcydDRudkNzenhIc3p5ZmEyVXVTbDRoMFB5NnNtWjR4ZG1SRnF4NCtMcGtYYnZqRmFWVExhM08wTVVsVDg1MGFEa0ZHeFJCdlNHNGJJdVNJV2xULzZNVmU5cWk1d3JmdE1UUVVWMmlQQ1Z1Vm5paEVaTDBTYms0bkRTMnpWMVRjMHkzcUszbXQ3a2xLSDVIUkF4eGZjL2lsWkJSd1NaRGJNTXV1cWFvK21UTmwwY25TUHQ4VHY3UW9udmFWdFcxd3FsYXV0NjcyRnBRVDhiZE9lbkhobGYxTFo2MlpSWS8zb3hoUWpwREcwRjNMY2NMYkxlNEVscWs0SktLSEM2cjZNY1RLZ2J3bm9vcmVGL0ZWWHpBc0hRU0JxcDRBVWtWSCtLYWd1c3FQZ0taTWRDSWs1bTN0WUpKTkpRTGdiWkpyWW84TElaRUkvd2J3aWVMVlJSQTRCYXVNYlJkWFZCUnhMS0tFcFlaZWtMZHNpbEsyb0pkekxpQ0Y3bXZ3c2EyaW85Qk1SbHI1Y1dvR01Jd3pXbGwyejlnYnkxZEdBWWZrUzhLSElia2NYY01RM2RqaVlQRVpSZzV0cDFVa25hT3ZLZTA0OTJvbFQvak9DVXBaTlYwVWFKa0U5eXYxYVdHay8reHlVS1RsQlc0ZSszUzZxYStyaS9xbVp5K2RGM1A2Vm5hYUlQR3d6SWd0RW1tdEdsWlBBaUdwaWZwdVBpaWxici9DT3BXeTI0TEJTMVI1Q0xqRnZnZUw5UWdxcExKZXVHcEN0dlJERHVRdnAxK1VFS2hvb2tNdmNsTTB5clZTV2pJUjRtZWJLNFJWT25Jc2JrdkQ3YkQrNGJ3Ym1MSWV1NGgyNkwrMWs2bXdLQ0VTU0Y3blhZUVZIbGhub3pwTTVydEtmbGFxM25LMnQ2bVljSFRkT0NmQjlVZ3NFUkMxaFQ2eUdpbmV3QlBrdlFwNnMyaGpTNGduaHJkQjB2ZFJkdFhOR3JESUxVZHBBUDhSQ3hBWDAwTHorQTVJT3hKTmtZWGJjNGFGK3NnN2doaHQxTGZnSDJOOXRGdkVWbjVIdEVyZDlHUkhTZCtaWHpzRGpyYjd5SFdodnVJMzBNWG82ZTZqMU1TT0gwWU9FUC9mU1JDTE5JVWV5ekVvb2V3cy92b0RvR09veXYxak44KzhHOFlNV3AvaG9wZjBJTmZLVXEvWVFxL0k0cy9zSTAvOFFuK3d1ZjRPL1EvVmZQc3dQOWJzb3lTM3lvK3d3akdpTEVIbjJJY0UyaFB6Rk5NTkpMSStFN1g0eHRMamQ1SDd4MzAzVzRhWGpYc3grcjBrM1JIU1BJaXRWT2gvalI5Rzhybnk3Z1FZak40QmM5U3I1OUNmZzYxWDVTa3p4TkhDdXNZUmV4ZlVFc0RCQlFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBRTJhMms2Nm9rUWVrd0VBQUxRQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1EwTG1Oc1lYTnpqVkpMYnhNeEVQNmNiTE5OV0dnb1VCNEZWRlZSU1ZvSkkvcTR0TW9sQWdrVU9EUnQ3czd1ZE92S3NTT3ZBK3JQNnFHcXhLRS9nQjlWZGJMMEFCd2dzand2ZnpQempUVS9iMzVjQTlqQjZ6cXFXR2tnd3RNWXoySThGNmlGVTEyMDNnbTArdHJKaVZIaHhQbnhuc3hvN0dTUnlvRWVUd3dOZ3ZNcXAzM0dIMmlyUTFmZ1RYdWVoTTVRSU9xNWpBU1crdHJTMStsNFJQNUlqUXhIbHZzdVZXYW92Sjc1ZDhGb1JrZ2crV1F0K1o1UlJVSHNic3pSckxYRC9Pb0RuVnNWcHA1TGZlNDduOHZ2Tk5vK2sycWs1ZEg1aEE3cGhEelpsQTcrZXN4VVVJRUJoY3lKTzZ0QW1UeldOcnpmM2R2dmN1SEd3RTE5U2g5MXlmeVB4bS9QMURmRkEzNndxWEdGdHZrWENxY3VpL0Vpd1NwZUpsaEFMVUdNVi96TDg0d2hzUG9QNGdMci95OGlVTTBwOEwrMU83L05PZkV1dU5RWm1UcFA4cEFUQS9XVU1UeGV0ZDBaWW8zWEkrSk5FYzNtalBQTTRodGprWFdkclM0cWZJREc1dFlseE9ZVktoZnNWZEJnV1N1eHg3akhjdVVYQ2drZUFLVzFVTDVIV0NyeFRUd3M5VEllc1k3d0dFOXd2OFF4a1RJRHQxQkxBd1FVQUFBSUNBQk5tdHBPQVRUMXVwY0JBQUM3QWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNeTVqYkdGemM0MVNRVTlUUVJEK3RqejZiSDFLUlVBRk1jWTAybUxpR2xBdWtGNHFKSkRLZ1dMdjIvZUd4NUx0YnJOdkMvRm5jU0FtSHZnQi9pamo5TWxCUEdpejJaMlozVzltdm04elAzNSt2d0h3QVM5cW1NTktIUkdleEhnYTQ1bEFOWnpwb3ZsZW9OblRUbzZOQ3FmT2o3WmxSaU1uaTFUMjlXaHNxQitjVnpudE1INVhXeDA2QW05YXN5UzBCd0pSMTJVa3NORFRsbzRtb3lINUV6VTBmTFBZYzZreUErWDFOTDY5akthRUJKSURhOGwzalNvSzR2RDFETTJhVzh5djF0ZTVWV0hpdWRSaHovbGNYdEp3NjF5cW9aWW5YOGQwVEtma3lhYTArOWRqcG9JS0RDaGtUdHhaQmNya0YyM0Q1c2Z0blE0WHJ2ZmR4S2UwcjB2bWR4cS9PMWNYaWdYdTJkUzRRdHY4TTRVemw4VllUYkNHNXdubVVVMFFZNTEvZVJZWkFtdi9JQzd3NnY5Rm1HL0JIbVdmV0JaL1g2djloOXl4ZDhHbHpzaVVFZktZOHdOMWxUR3NjcTdWSHVBbFQwbkVBeU1halNuMXFjYzd4ajIyTmZZNnFQQUM2aHR2cnlFMnZxRnl4VkVGZFQ2ckpYWWY5L2xjK1kxQ2dvZEE2YzJYN3hFV1Nud0RqMHE3aU1kc0l5eGhHUTlLSEJNcE0vQUxVRXNEQkJRQUFBZ0lBRTJhMms2ZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZFWldOc2FXNWxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM09sVWsxckZFRVFmYjFKZGpicmFyNDBKbjRjQkE4bWgvUWh3WXNpdUlrTEM0T1NqZVFpQ0wwemxkbGVlcnBudTN2aTcvSVU4T0FQOEVlSk5aTUZMd3FDbDNwZEg2L3FWZEUvZm43N0R1QUVUL3RZd1Y2Q1J3a2VDNndZVndnY3BjNFg4Z3ROaitleThpNjZ6Qm1aT1UreXBEaHplWkNlUXVWc0lKbTY0cFZBTDlSVlpUUjVnZTEwcnE2Vk5Nb1c4aUo2Ylp2OG1yOWFqSE9CenFlaFFMS29YYVRHN2VrUWFzcmZSb0hkVzFxcDRrd09kVEcya1FyeVRPMisxbGJITnl6dHhjR2x3T3FweTBsZ0k5V1czdGZsbFB4SE5UWFV6SFdaTXBmSzY4WmZCbGZqVEFlQnZjbm8vSXd5dzV6ODNUWFpPRm5LRnhpTXJTVi9hbFFJeEpWbnFYYXlNaXBlT1YrK2xEbVZUb1pNVG1oUlU0Z2o1ODladTRxYXljLy8xcFJGOXk5YzdUTWE2VWJFL3AvWVI4MjZBOXpGdlFSUEJJYi9QMVpnOC9mbFAwem5sUEZaRC82NUw1Nmh3ejhCV0FQZmpTMFl1MGhhN0dHOXhmNFM3MkRRb21nV1lMdkJubXg5NWgvZVFIemxSd2ViYkx0TlVIekdGcjhIdHdYWXhvTTJ2OXZhaDdqUDJPZGNCL3ZZd2ZvdlVFc0RCQlFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qVXVZMnhoYzNPVlV0Rk9GREVVUFYyR0hYWWRaVVZCRVRVK0VMTUxabXNFZllGczFJMGtKcXVKUVBhOU8zTlpTbWJicGUxQStDckNBekh4d1Evd280eDNSaDZNTVFiU3RQZmU5dHpUYzVyKytQbnRPNEJOUEcxZ0JrdE5SSGdRNDJHTVpZRjZPTlIrOWFYQStrQmJPYzFWT0xCdThrWm1OTEhTcDNLWGpndnlZY2U2TDRVTkttaHIvQmEzYld1alEwK2cyNzVCWDJjb0VQVnRSZ0x6QTIzb2N6RVprZHRYbzV4M0ZnWTJWZmxRT1YzV1Y1dFJLVThnK1dnTXVYNnV2Q2N1dTllL2MvWFZhNWJiMk5Oam8wTGhtUEx0d0xxeFBLWFJ4cEZVSXkzM3o2YTBTd2ZreUtTMC9kZGhwcGlIQVY2K3l6SkgzbS8xbUs2NVp3dVgwbzR1SlM3LzY5cnVrVHBSN1BLRFNYUHJ0Umwvb25Cb3N4aVBFcXpnY1lKWjFCUEVlQ0x3NGlaZUJGYitvMTZnYzIweUZqZW04TDQ0STNkbFRlQjV1L09ILzZtendhWTJsNmwxeEJ3VEc2aXY4cHdmWUtiZEdlSVpmNmFJLzVWb3RVbzdaY1l6eGh6SEJtYzkxSGdBemJYMVM0aTFyNmhkY0ZWRGs5ZDZoVDNITFY2WGZxT1E0QTVRWmJQVmVZVDVDdC9DM1NvdTRCN0hDUGV4aU5zVmpvVlVIZmdGVUVzREJCUUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTmk1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOaGd1RUEwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0FuWktrSVpxSGpienNNVWcxNVJLdWhhRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TTZEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpBbzl1VkVDUmNaWXJ6MnRKbndSeHlkejdnWVNUNVlMckNIWXpTb2ZHeCtPd3dFMGRDQTVSTWtBY0pod050TGgvYXMzbWdSY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUUyYTJrN0tJeXBtUGdNQUFKTUhBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRZdVkyeGhjM085VmV0T0UwRVUvcVlVVnNxS1ZSSHZDb2phQzdJb2lwZFdWQ3JWa25yRmtCaC82SFE3TEV1Mk8zVjNGdlZGZkFJZlFCUHZKc2JmUHBUeHpOTEl4UXFZR05OMForYWJjNzd6blROblo3Ly8rUHdWd0ZsVXVyRWRwL1JqTklWZVdDbmtNV2JnZEEvT1lOekEyUjRZT0dkZ3dzRDVGRHB4SVVXV0Z3MWNNbEF3VUdRd2w3ZzNQQi81dG5LbHp6QlVsWUZqUFJPMThVV0wxMXlyemhWWEw1b2l0TW90bXdKRGwxcHd3K0V4aG56VmxWYlQ0MnBlQm8wSnF5NGEwZ3B0Njc1NEdvbFFsV1Z3TDVMa1QxNmhkaXU2dnFzbUdlNW0vc0p2YzBIWk9ZWmtTZFlGdzQ2cTY0dmJVYU1tZ2dlODVoR3lxeXB0N3MzeHdOWHJGcGpVQ1ZEdUZkOFhRY25qWVNob09icDFWY09uSnlpaEpERjdETWN6MlZVaVZkVDBTSjBqaUpvclViY2VhR0NjekkxQWhKR25LRks2dXNpWHVCVXAxN09xYnFob3MzK3RUc3F3cFhWc25XM3hqd1hSVG9WSjRrcE5QN2RGTXhacTRESkQ5NnpyK0Z4RkFkR0pyWWd0THNkc2NMVmdUYmxPeFZmQ0VVRmhHZlc0NzFpektuQjlwOURlVG12b296Z3I1bmRxaThMV2FiNzhIVnlWbnkxOU93b0M0U3VyUktYVkJTaitCN1Z4eldabEZOaWk3T3FhNzI5MzVxUGFtMXBzMnJjOUdSTGZMYUVXWk4zQXBJa3J1R3BpRjNhYlNHT25pVDVjTXpHRkVzUGdwdW9OWERjeGpUTERvWTBPMXNRTm5LQ3l0a3VCR21wOXJsckRUUk9IY0poaDVHL2FlZzNYOGdreEhON3dpQmgycjdqOGFqMkc3SmJqMHQzZ0NIVy9mSThoazNrMHRicERtNEZVMHBZNmNDREl1U0dWMElIcHlEb3krczFQY2RzV0lWMUhZM1FoUGY3SE44dnY3Mm52V29SVWtIS0dQWmxLMjM3ZlJydHozSXVvU0JjemYrcjlqWkhzSEFibzB1NEY5UjRTNmJSdU1ZQkc2amY2QkhUUXZ3OTdhTGVmWmlVa1ltUkhMdjhPTERmeURvbmNCM1M4SVNpQnZmVHNJa1BnQ2ZiUnM1OHdNc1YrSEFUaW1hWms5S08rSVJwTitJbzh0TlZNN2kzeHZVWGlJNUxWTCtoOG1PLzRoSzRFdnNINGhHMk14dTU4Y2gyU3luZXV0L21BbnRleGFLM2xBSEVETmt6VUtiTEFNT1l4QVFjVldxL29tMm5wTXpHSkl6aEs2Z2JpRldzaGd6UWJJaVJKNHpIaTBKa2VUMStqSEU3UVRPZGd4VGtCbmJuM01GKzNMWVc1Yk5BS3RVS1hiQkdlUkNZZXM4akZlM21Na0h3Z1JWYmI0K0xoSjFCTEF3UVVBQUFJQ0FCTm10cE9tMWZIbUVJQkFBQWFBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM09WVVV0TEF6RVFudlMxYlYydDFnZUlWdzlXMFFnVkVWcDZLUmFFVmJDdHZhZTcwNXF5VFdxU1ZmeFpuZ1FQL2dCL2xEaTdlaElSSFpqWE56TmZac2piKzhzckFKekFWaFh5VVBkZzNZTU5CcVcyVk5KMUdPVDNHaU1HaGE2T2tFRXRrQXF2a3ZrWXpWQ01ZMExxZ1E1RlBCSkdwdmtYV0hDMzBqTHdMNVJDMDQyRnRVanBZU0ExWDhUQ1RiU1puL0lJNTVyYmtQZnhMa0hyZXRwY0o5b0pKN1d5dTgwV2c4cEFUcFZ3aVNIR2JxRE5sRC9ndURuallpejU4SEdCZlp5Z1FSVmkrMXN4RWtSRERaYmZ1TW5ad0JtcHBxME9NVllIT2pFaDltUzY1UFpQRHgvTnhMMmdPODlWR0d0TGM1Zm9iblhrd2FZUEJTZ3lPUGpIRFF4MmZ0bWFRZVBQWEhBTU9mcWRWQmdwYlVLK1JCRW5ueUxGL1dkZ1R4VGt3Q05ieXNBT2xNbjZudzFRZ2FWczFNKzZsbUVsOHpWWXpkQTFzdFZNR2FHcGxEOEFVRXNEQkJRQUFBZ0lBQW1aMms2RjE4azEwQUlBQUlnSkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJKMVdTMi9iTUF5KzUxZG93VTRGTENWTk1SU0Y2MTY2QWgzYWJVQzJZVmRWWmx4bDFtT1NuTFFZOXQ4blM0bnJKTGFiTHJlUUg4bVBMOUhwMVpNbzBRcU01VXBlanFkNE1rWWdtY3E1TEM3SDM3L2RKT2ZqcTJ5VWFxT1d3Qnp5YUdrdng0L082UXRDQkYyQnhGUlQ5Z2hZbVlKOC9YSlB6dkRFZXhtaDdTK1lYRHhaM3BpdDEydThuZ1dEMDhsa1NuN2UzODI5QjBFVExxMmpra0hiM1BJTEc3UjNpbEVYYUw0YUh2VWhubXdlaFVuQVlmOS9uSVZncVZBNWxEOWlKYktnVGNtT2JCUnhoVkdWdnMwenBnU21ncFpPWVYxU3QxQkdmRWpKVmh1eDFEaStvTXg1UVE1Q0pWVHJ4QW92VFppU3puaE5TbHFZYUxUcFJqYXRHYXgyZy9zK2FQQUdZTE9tUkduTTB2UFJ2QVNEcmFvTUEyOStucEp1VmErcG82WUExMm02VVVVYXBNMGppbkxRSUhNL083dmNHdkh6aTNDbmpMNHJlQTBQcytWZTdScGdxejVNR1Rnc1dJTmNOYzJiNFdtcmRBMkE3TE5wU1ZxcFBGUzhiUGxPZFZrVmZqTDNva1hwcnZBZ3M4M294VnB1L1BRa3VwOXNITk1sTlVtMDYwOThKM21mT2o3dFNMNEIrc2xiOEtJeVlaY085UnNhN0pHdm9Gc2JFWGwrWHhPOEJzc00xMDZaekptcTdzNmhvdCtMb0pJdndMcCt5RGJZTlN4b1ZicGJvVXNRSUYxZy85SHZVTjIzSnZJZzZ0Z1ljdzJNTHpnYkRORUo2aytVdko1cFU0emorTzdtbUZ4VEI5bjdQM0hRd2dCang0WDNSb1grbTVJdTlCRnNCNm5VQTlrekppa1ptREwvZW5Tc3puSDdOUFJTQkhCclJ3STJpV3YwcGhVNnc2ZnRwemQ5bHlTSVVTbVZRNVV1RE0wQk9ZWHFFekZERDhCb1pRRnhod3o4cnJnQml6N1JGVVhUS1VxUy8xdy8vMmo4b2dWOHBnSXkzam92dUQ0aTJESmZ3UmFpMjBkODZ2MFdPaTVqTEd1WWJ5eVhaT241a1pRY0l2bzhsVHpuN25rZThEZitHZ3hOZXU1THdQeldQNy9FOHpVSnB2N2xlOUgyZStDU2xWWCs2Z0pzWU5uSkNUbnhoNjFNeVZZeU1OakR2dXVhSEpIckc2ZDdLN0hibTdPNUw2TndSdXZQcW16MEQxQkxBUUlVQXhRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBQUFBQUFBQUFBQUNrZ1FBQUFBQk5SVlJCTFVsT1JpOU5RVTVKUmtWVFZDNU5SbEJMQVFJVUF3b0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBRUFEdFFjNEFBQUJOUlZSQkxVbE9SaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUJBQTdVSDFBQUFBYVc4dlVFc0JBaFFEQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUFBQUFBQUFBQVFBTzFCRmdFQUFHbHZMM0JzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUJBQTdVRkJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUJVQUFBQUFBQUFBQUFBUUFPMUJjUUVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFFQUR0UWFRQkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3RUNGQU1LQUFBSUFBQk9tdHBPQUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFCQUE3VUhSQVFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlVFc0JBaFFEQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQVFBTzFCRXdJQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDFCTEFRSVVBeFFBQUFnSUFFMmEyazdZODZmQW9nRUFBT2dDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVzBDQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWOEVBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1VvR0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbXBzUzZzMEFnQUFHZ1FBQUNRQUFBQUFBQUFBQUFBQUFLU0Iyd2NBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSkdVVk4wWVhSMWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVkVLQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1B3cUJOb0FFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dVUU1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1RRT0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnU2NRQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVPRWdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNFVXS2tCRVJ3QUFFbHBBQUF2QUFBQUFBQUFBQUFBQUFDa2dhVVRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUU13QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tmk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2dWazBBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazV5TGMzOVJ3RUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVlkyQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25BdDdZUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dlMDNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTFMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVJM096NUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCZ2prQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaStNdk9CUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0JHVHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNmhaeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2diSThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG9uWUFyZ2tEZ0FBalRNQUFDZ0FBQUFBQUFBQUFBQUFBS1NCUno0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJR3hUQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFBQUFBQUFBQUFBQUtTQlNrNEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG4yQ3F2dWtBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCT0ZBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaFE1RkZmYUFBQUEwQUVBQUJFQUFBQUFBQUFBQUFBQUFLU0JMRklBQUZOcGJYQnNaVk4wYjNKaFoyVXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUckpmRzNWWEF3QUFHQWdBQURJQUFBQUFBQUFBQUFBQUFLU0JOVk1BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtZ3lJYWRJQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQjNGWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVSOVh2QkhBUUFBSVFJQUFERUFBQUFBQUFBQUFBQUFBS1NCZEZnQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFBQUFBQUFBQUFBQXBJRUtXZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0VwTWErS0lEQUFCcUVBQUFHQUFBQUFBQUFBQUFBQUFBcElIOFd3QUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5c1VFc0JBaFFERkFBQUNBZ0FUWnJhVHBZQUFXRy9FQUFBRXkwQUFCOEFBQUFBQUFBQUFBQUFBS1NCMUY4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMVJsYzNRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE8zZDJ6VVZFQkFBQXNBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSFFjQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ1hCeUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0UW44elBVUUVBQUN3Q0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbkdiU1pEU0F3QUFPd2tBQUNvQUFBQUFBQUFBQUFBQUFLU0IxblVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNElyUnBNUndBQUFFd0FBQUJLQUFBQUFBQUFBQUFBQUFDa2dmQjVBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOXdiMjB1Y0hKdmNHVnlkR2xsYzFCTEFRSVVBeFFBQUFnSUFFMmEyazRjL3M3Y29BRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWjk2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dZOThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2YVM0M0ptUUVBQU4wQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1MyQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnUmFEQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJSHhoQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRwMzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQjBJWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUFBQUFBQUFBQUFBS1NCVDRzQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VVUmxZMnhwYm1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VXTkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazduZkFaY1JnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVEdQQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRzb2pLbVkrQXdBQWt3Y0FBRElBQUFBQUFBQUFBQUFBQUtTQnhwQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHB0WHg1aENBUUFBR2dJQUFERUFBQUFBQUFBQUFBQUFBS1NCVkpRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FBSm1kcE9oZGZKTmRBQ0FBQ0lDUUFBUXdBQUFBQUFBQUFBQUFBQXBJSGxsUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJGQkxCUVlBQUFBQU5nQTJBQ2tUQUFBV21RQUFBQUE9XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOmZhbHNlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJkZW1vLWFwcC1zbWFydC1jb250cmFjdC0xLjEuamFyXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ0MTE3fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE4MjM3NDc2MX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlBPUmV2aWV3IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUE9SZXZpZXdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVGVtcGxhdGUgZmlsZSBmb3IgZW1haWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHdvcmtmbG93IHNlcnZpY2UgZm9yIFB1cmNoYXNlT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4MjYsXCJyZXZpc2lvbklkXCI6XCJjOGI3ODVjNTgzMWVhNjI4ZDkwNzA1NzA4MjBjMzRkNFwiLFwiaXRlbUJ5dGVzXCI6XCJQQ0ZrYjJOMGVYQmxJR2gwYld3K0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWlCNGJXeHVjenAyUFNKMWNtNDZjMk5vWlcxaGN5MXRhV055YjNOdlpuUXRZMjl0T25adGJDSWdlRzFzYm5NNmJ6MGlkWEp1T25OamFHVnRZWE10YldsamNtOXpiMlowTFdOdmJUcHZabVpwWTJVNmIyWm1hV05sSWo0S0NUeG9aV0ZrUGdvSkNUd2hMUzBnVGtGTlJUb2dNU0JEVDB4VlRVNGdMU0JDUVU1RVJVUWdMUzArQ2drSlBDRXRMVnRwWmlCbmRHVWdiWE52SURFMVhUNEtDUWs4ZUcxc1Bnb0pDUWs4YnpwUFptWnBZMlZFYjJOMWJXVnVkRk5sZEhScGJtZHpQZ29KQ1FrOGJ6cEJiR3h2ZDFCT1J5OCtDZ2tKQ1R4dk9sQnBlR1ZzYzFCbGNrbHVZMmcrT1RZOEwyODZVR2w0Wld4elVHVnlTVzVqYUQ0S0NRa0pQQzl2T2s5bVptbGpaVVJ2WTNWdFpXNTBVMlYwZEdsdVozTStDZ2tKUEM5NGJXdytDZ2tKUENGYlpXNWthV1pkTFMwK0Nna0pQRzFsZEdFZ1kyaGhjbk5sZEQwaVZWUkdMVGdpUGdvSkNUeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlsZ3RWVUV0UTI5dGNHRjBhV0pzWlNJZ1kyOXVkR1Z1ZEQwaVNVVTlaV1JuWlNJK0Nna0pQRzFsZEdFZ2JtRnRaVDBpZG1sbGQzQnZjblFpSUdOdmJuUmxiblE5SW5kcFpIUm9QV1JsZG1salpTMTNhV1IwYUN3Z2FXNXBkR2xoYkMxelkyRnNaVDB4SWo0S0NRazhkR2wwYkdVK1NXNWpiMjFwYm1jZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z1VtVjJhV1YzUEM5MGFYUnNaVDRLQ1FrS0NRazhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGdvSkNRa0pjSHNLQ1FrSkNRbHRZWEpuYVc0Nk1UQndlQ0F3T3dvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1hSaFlteGxld29KQ1FrSkNXSnZjbVJsY2kxamIyeHNZWEJ6WlRwamIyeHNZWEJ6WlRzS0NRa0pDWDBLQ1FrSkNXZ3hMR2d5TEdnekxHZzBMR2cxTEdnMmV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pmUW9KQ1FrSmFXMW5MR0VnYVcxbmV3b0pDUWtKQ1dKdmNtUmxjam93T3dvSkNRa0pDV2hsYVdkb2REcGhkWFJ2T3dvSkNRa0pDVzkxZEd4cGJtVTZibTl1WlRzS0NRa0pDUWwwWlhoMExXUmxZMjl5WVhScGIyNDZibTl1WlRzS0NRa0pDWDBLQ1FrSkNXSnZaSGtzSTJKdlpIbFVZV0pzWlN3alltOWtlVU5sYkd4N0Nna0pDUWtKYUdWcFoyaDBPakV3TUNVN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSkNYZHBaSFJvT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWtqYjNWMGJHOXZheUJoZXdvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1dsdFozc0tDUWtKQ1FrdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPbUpwWTNWaWFXTTdDZ2tKQ1FsOUNna0pDUWwwWVdKc1pYc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGJITndZV05sT2pCd2REc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGNuTndZV05sT2pCd2REc0tDUWtKQ1gwS0NRa0pDUzVTWldGa1RYTm5RbTlrZVhzS0NRa0pDUWwzYVdSMGFEb3hNREFsT3dvSkNRa0pmUW9KQ1FrSkxrVjRkR1Z5Ym1Gc1EyeGhjM043Q2drSkNRa0pkMmxrZEdnNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1hBc1lTeHNhU3gwWkN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1cxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9tVjRZV04wYkhrN0Nna0pDUWw5Q2drSkNRbGhXMmh5WldaZVBYUmxiRjBzWVZ0b2NtVm1YajF6YlhOZGV3b0pDUWtKQ1dOdmJHOXlPbWx1YUdWeWFYUTdDZ2tKQ1FrSlkzVnljMjl5T21SbFptRjFiSFE3Q2drSkNRa0pkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9tNXZibVU3Q2drSkNRbDlDZ2tKQ1Fsd0xHRXNiR2tzZEdRc1ltOWtlU3gwWVdKc1pTeGliRzlqYTNGMWIzUmxld29KQ1FrSkNTMXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWw5Q2drSkNRa3VSWGgwWlhKdVlXeERiR0Z6Y3l3dVJYaDBaWEp1WVd4RGJHRnpjeUJ3TEM1RmVIUmxjbTVoYkVOc1lYTnpJSFJrTEM1RmVIUmxjbTVoYkVOc1lYTnpJR1JwZGl3dVJYaDBaWEp1WVd4RGJHRnpjeUJ6Y0dGdUxDNUZlSFJsY201aGJFTnNZWE56SUdadmJuUjdDZ2tKQ1FrSmJHbHVaUzFvWldsbmFIUTZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNXRmJlQzFoY0hCc1pTMWtZWFJoTFdSbGRHVmpkRzl5YzExN0Nna0pDUWtKWTI5c2IzSTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYUmxlSFF0WkdWamIzSmhkR2x2YmpwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxemFYcGxPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRbG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxM1pXbG5hSFE2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDV3hwYm1VdGFHVnBaMmgwT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNTBaVzF3YkdGMFpVTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNXRXViV051UW5WMGRHOXVld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRbDlDZ2tKQ1FrdWJXTnVTVzFoWjJWN0Nna0pDUWtKZG1WeWRHbGpZV3d0WVd4cFoyNDZZbTkwZEc5dE93b0pDUWtKZlFvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MGV3b0pDUWtKQ1hkdmNtUXRZbkpsWVdzNlluSmxZV3N0ZDI5eVpEc0tDUWtKQ1gwS0NRa0pDUzV0WTI1VVpYaDBRMjl1ZEdWdWRDQnBiV2Q3Q2drSkNRa0phR1ZwWjJoME9tRjFkRzhnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNXRZMjVFYVhacFpHVnlRbXh2WTJ0N0Nna0pDUWtKZEdGaWJHVXRiR0Y1YjNWME9tWnBlR1ZrSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKWW05a2VTd2pZbTlrZVZSaFlteGxld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tTW1ZeVpqSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSkkySnZaSGxEWld4c2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURFS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYVhKemRDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSFJvWlNCc1lYSm5aWE4wSUc5bUlIbHZkWElnYUdWaFpHbHVaM011Q2drSkNVQnpkSGxzWlNCb1pXRmthVzVuSURFS0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOakEyTURZd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBCY21saGJDd2dKMGhsYkhabGRHbGpZU0JPWlhWbEp5d2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk16QndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXpkSGxzWlRwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tSnZiR1E3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4bGRIUmxjaTF6Y0dGamFXNW5PaTB4Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFZV2RsQ2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01nb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdZV3hzSUhObFkyOXVaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ01nb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qSTBjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklETUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCMGFHbHlaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ013b0pDUWtxTHdvSkNRa0phRE43Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTRjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdhVzRnZVc5MWNpQmxiV0ZwYkhNdUlGUm9aWE5sSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMjFoYkd4bGMzUWdiMllnZVc5MWNpQm9aV0ZrYVc1bmN5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dOQW9KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakUyY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUhKbGFHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQlRkSGxzWlFvSkNRbEFkR2x3SUZObGRDQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUJoYm1RZ1ltOXlaR1Z5Y3lCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObVptWm1abVk3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTEwYjNBNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxXSnZkSFJ2YlRvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxYUnZjRG95Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pKd2VEc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlGUmxlSFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdkR1Y0ZEM0Z1EyaHZiM05sSUdFZ2MybDZaU0JoYm1RZ1kyOXNiM0lnZEdoaGRDQnBjeUJsWVhONUlIUnZJSEpsWVdRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZMjlzYjNJNkl6WTFOalUyTlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaExDQldaWEprWVc1aExDQlRaV2R2WlN3Z2MyRnVjeTF6WlhKcFpqc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2JHbHVhM011SUVOb2IyOXpaU0JoSUdOdmJHOXlJSFJvWVhRZ2FHVnNjSE1nZEdobGJTQnpkR0Z1WkNCdmRYUWdabkp2YlNCNWIzVnlJSFJsZUhRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElHRXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTlRZMU5qVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCSVpXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1NHVmhaR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWSVpXRmtaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPakl3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pJd2NIZzdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJSFJsZUhRdUlFTm9iMjl6WlNCaElITnBlbVVnWVc1a0lHTnZiRzl5SUhSb1lYUWdhWE1nWldGemVTQjBieUJ5WldGa0xnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZEN3amRHVnRjR3hoZEdWSVpXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pPRGxpWXpVMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlWHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxaWIzUjBiMjA2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxMGIzQTZPWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFdKdmRIUnZiVG94TW5CNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRUp2WkhrS0NRa0pRSE5sWTNScGIyNGdRbTlrZVNCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0IwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCaWIyUjVJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VTQXViV051VkdWNGRFTnZiblJsYm5RZ1lTd2pkR1Z0Y0d4aGRHVkNiMlI1SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNNE9XSmpOVFU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQkdiMjkwWlhJS0NRa0pRSE5sWTNScGIyNGdSbTl2ZEdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2psd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MWliM1IwYjIwNk9YQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVadmIzUmxjZ29KQ1FsQWMyVmpkR2x2YmlCR2IyOTBaWElnVkdWNGRBb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUdadmIzUmxjaUIwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1JtOXZkR1Z5Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFwYmkxM2FXUjBhRG8zTmpod2VDbDdDZ2tKQ1FrdWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhKN0Nna0pDUWtKZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIa3NkR0ZpYkdVc2RHUXNjQ3hoTEd4cExHSnNiMk5yY1hWdmRHVjdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT201dmJtVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGw3Q2drSkNRa0pkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FralltOWtlVU5sYkd4N0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UQndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxld29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhKMFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVWRzl3UTI5dWRHVnVkQ3d1YldOdVVtVmpRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia0p2ZEhSdmJVTnZiblJsYm5Rc0xtMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVKYldGblpVZHliM1Z3UTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2Ymt4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmxKcFoyaDBWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrTmhjSFJwYjI1TVpXWjBTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVVtbG5hSFJKYldGblpVTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia2x0WVdkbFEyRnlaRXhsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeWV3b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkhjbTkxY0VOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp6bzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYQjBhVzl1VEdWbWRFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtOaGNIUnBiMjVTYVdkb2RFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZPWEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1ZHOXdTVzFoWjJWRGIyNTBaVzUwTEM1dFkyNURZWEIwYVc5dVFteHZZMnRKYm01bGNpQXViV051UTJGd2RHbHZibFJ2Y0VOdmJuUmxiblE2YkdGemRDMWphR2xzWkNBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFEyRnlaRUp2ZEhSdmJVbHRZV2RsUTI5dWRHVnVkSHNLQ1FrSkNRbHdZV1JrYVc1bkxXSnZkSFJ2YlRvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVKYldGblpVZHliM1Z3UW14dlkydEpibTVsY25zS0NRa0pDUWx3WVdSa2FXNW5MWFJ2Y0Rvd0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUjNKdmRYQkNiRzlqYTA5MWRHVnlld29KQ1FrSkNYQmhaR1JwYm1jdGRHOXdPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0WW05MGRHOXRPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5c2RXMXVld29KQ1FrSkNYQmhaR1JwYm1jdGNtbG5hSFE2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtUR1ZtZEVsdFlXZGxRMjl1ZEdWdWRDd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUkpiV0ZuWlVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MXlhV2RvZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTndjbVYyYVdWM0xXbHRZV2RsTFhWd2JHOWhaR1Z5ZXdvSkNRa0pDV1JwYzNCc1lYazZibTl1WlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTVFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdacGNuTjBMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRElLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0J6WldOdmJtUXRiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNd29KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSFJvYVhKa0xXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3pld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFSnZlR1ZrSUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliM2hsWkNCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRnVjJVZ2NtVmpiMjF0Wlc1a0lHRWdabTl1ZENCemFYcGxJRzltSUdGMElHeGxZWE4wSURFMmNIZ3VDZ2tKQ1NvdkNna0pDUWt1YldOdVFtOTRaV1JVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrSnZlR1ZrVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCV2FYTnBZbWxzYVhSNUNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCMmFYTnBZbWxzYVhSNUlHOW1JSFJvWlNCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWmIzVWdZMkZ1SUdocFpHVWdhWFFnZEc4Z2MyRjJaU0J6Y0dGalpTNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjbnNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WkdsemNHeGhlVHB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCUWNtVm9aV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSEJ5WldobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliMlI1SUhSbGVIUWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJYWlNCeVpXTnZiVzFsYm1RZ1lTQm1iMjUwSUhOcGVtVWdiMllnWVhRZ2JHVmhjM1FnTVRad2VDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdUV0ZyWlNCMGFHVWdabTl2ZEdWeUlHTnZiblJsYm5RZ2RHVjRkQ0JzWVhKblpYSWdhVzRnYzJsNlpTQm1iM0lnWW1WMGRHVnlJSEpsWVdSaFltbHNhWFI1SUc5dUlITnRZV3hzSUhOamNtVmxibk11Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV6Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pmVHd2YzNSNWJHVStQQzlvWldGa1Bnb0pQR0p2WkhrZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUdHRZWEpuYVc0NklEQTdjR0ZrWkdsdVp6b2dNRHQzYVdSMGFEb2dNVEF3SlRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1R4alpXNTBaWEkrQ2drSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQm9aV2xuYUhROUlqRXdNQ1VpSUhkcFpIUm9QU0l4TURBbElpQnBaRDBpWW05a2VWUmhZbXhsSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDUWs4ZEhJK0Nna0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlHbGtQU0ppYjJSNVEyVnNiQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjRG9nTURzaVBnb0pDUWtKQ1R3aExTMGdRa1ZIU1U0Z1ZFVk5VRXhCVkVVZ0x5OGdMUzArQ2drSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnBaRDBpZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWm1abVpqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklESndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWNISmxhR1ZoWkdWeVEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblFpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE9IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak5qVTJOVFkxTzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yWnZiblF0YzJsNlpUb2dNVEJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxY2lCb1lYWmxJR0VnYm1WM0lHbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzTGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxTR1ZoWkdWeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU1tWXlaakk3WW05eVpHVnlMWFJ2Y0RvZ01EdGliM0prWlhJdFltOTBkRzl0T2lBd08zQmhaR1JwYm1jdGRHOXdPaUF5TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBeU1IQjRPeUkrQ2drSkNRa0pDUWtKUENFdExWdHBaaUJuZEdVZ2JYTnZJRGxkUGdvSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUluUmxiWEJzWVhSbFEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdHRZWGd0ZDJsa2RHZzZJRFl3TUhCNElDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVKYldGblpVSnNiMk5yU1c1dVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnZDJsa2RHZzlJakV3TUNVaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051U1cxaFoyVkRiMjUwWlc1MElpQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklEQndlRHR3WVdSa2FXNW5MV3hsWm5RNklEQndlRHR3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdDBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQR2x0WnlCaGJHbG5iajBpWTJWdWRHVnlJaUJoYkhROUlpSWdjM0pqUFNKb2RIUndjem92TDNCdmNuUmhiQzV3YkdGMFptOXliVFl1YVc4dmMzUmhkR2xqTDJ4dloybHVYM0JoWjJVdmNHeGhkR1p2Y20wMkwyeHZaMjh1Y0c1bklpQjNhV1IwYUQwaU1qWXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF5TmpCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdGthWE53YkdGNU9pQnBibXhwYm1VZ0lXbHRjRzl5ZEdGdWREdDJaWEowYVdOaGJDMWhiR2xuYmpvZ1ltOTBkRzl0TzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHTnNZWE56UFNKdFkyNUpiV0ZuWlNJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFFtOWtlU0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpSa1pHUmtaR08ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXhNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaVltOWtlVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0ZEc5d09pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpZDJsa2RHZzZNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaWJXRjRMWGRwWkhSb09pQXhNREFsTzIxcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkRiMjUwWlc1MElpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRJREU0Y0hnZ09YQjRPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak16TXpNek16TzJadmJuUXRjMmw2WlRvZ01UUndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCc1pXWjBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHZ3pJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME8yUnBjM0JzWVhrNklHSnNiMk5yTzIxaGNtZHBiam9nTUR0d1lXUmthVzVuT2lBd08yTnZiRzl5T2lBak5qQTJNRFl3TzJadmJuUXRabUZ0YVd4NU9pQklaV3gyWlhScFkyRTdabTl1ZEMxemFYcGxPaUF4T0hCNE8yWnZiblF0YzNSNWJHVTZJRzV2Y20xaGJEdG1iMjUwTFhkbGFXZG9kRG9nWW05c1pEdHNhVzVsTFdobGFXZG9kRG9nTVRJMUpUdHNaWFIwWlhJdGMzQmhZMmx1WnpvZ0xURndlRHNpUGtsdVltOTFibVFnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnY21WMmFXVjNQQzlvTXo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4WkdsMklITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJMmxtSUhWelpYSXVabWx5YzNST1lXMWxQejhnSmlZZ2RYTmxjaTVtYVhKemRFNWhiV1UvYUdGelgyTnZiblJsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMmxtSUhWelpYSXViR0Z6ZEU1aGJXVS9QeUFtSmlCMWMyVnlMbXhoYzNST1lXMWxQMmhoYzE5amIyNTBaVzUwUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bWFYSnpkRTVoYldWOUxBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05sYkhObFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM4amFXWStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd2paV3h6WlQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVsYldGcGJIMHNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZJMmxtUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aWNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSldXOTFJR2hoZG1VZ1lTQnVaWGNnYVc1aWIzVnVaQ0JQY21SbGNpQjBieUJ5WlhacFpYY3VJRkJzWldGelpTQThZU0JvY21WbVBTSWtlMmh5WldaOUlpQjBZWEpuWlhROUlsOWliR0Z1YXlJK2JHOW5JRzl1SUdGdVpDQmhZMk5sY0hRZ2IzSWdjbVZxWldOMExqd3ZZVDQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKSm01aWMzQTdQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0OGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdkR0ZpYkdVdGJHRjViM1YwT2lCbWFYaGxaQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3Y0dGa1pHbHVaem9nTlhCNElERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNDMTNhV1IwYURvZ01uQjRPMkp2Y21SbGNpMTBiM0F0YzNSNWJHVTZJRzV2Ym1VN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvZ0kwVkJSVUZGUVR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeHpjR0Z1UGp3dmMzQmhiajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFFvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHTnNZWE56UFNKdFkyNUVhWFpwWkdWeVFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jNklERTRjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGFISWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQnpkSGxzWlQwaVltOXlaR1Z5TFdKdmRIUnZiUzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0YkdWbWRDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRjbWxuYUhRdFkyOXNiM0k2Ym05dVpUc2dZbTl5WkdWeUxXSnZkSFJ2YlMxM2FXUjBhRG93T3lCaWIzSmtaWEl0YkdWbWRDMTNhV1IwYURvd095QmliM0prWlhJdGNtbG5hSFF0ZDJsa2RHZzZNRHNnYldGeVoybHVMWFJ2Y0Rvd095QnRZWEpuYVc0dGNtbG5hSFE2TURzZ2JXRnlaMmx1TFdKdmRIUnZiVG93T3lCdFlYSm5hVzR0YkdWbWREb3dPeUlnTHo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsUm05dmRHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBNWNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHNpUGdvSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSjBaVzF3YkdGMFpVTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdiV0Y0TFhkcFpIUm9PaUEyTURCd2VDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW1admIzUmxja052Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYXlJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTBsdWJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0YkdWbWREb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZENJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdVlXMWhiSFJ2TG1OdmJTOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdVptRmpaV0p2YjJzdVkyOXRMMkZ0WVd4MGIzUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdFptRmpaV0p2YjJzdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1YkdsdWEyVmthVzR1WTI5dEwyTnZiWEJoYm5rdllXMWhiSFJ2TFhSbFkyaHViMnh2WjJsbGN5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0OGFXMW5JSE55WXowaWFIUjBjRG92TDJOa2JpMXBiV0ZuWlhNdWJXRnBiR05vYVcxd0xtTnZiUzlwWTI5dWN5OXpiMk5wWVd3dFlteHZZMnN0ZGpJdlkyOXNiM0l0YkdsdWEyVmthVzR0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5MGQybDBkR1Z5TG1OdmJTOUJiV0ZzZEc4aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWFIzYVhSMFpYSXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREE3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1ZVc5MWRIVmlaUzVqYjIwdlkyaGhibTVsYkM5VlF6bFhXQzFxUldGRFdHMDRWRll6Y21SalEyazNZM2NpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxYbHZkWFIxWW1VdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0MFlXSnNaUzFzWVhsdmRYUTZJR1pwZUdWa0lDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdHdZV1JrYVc1bk9pQTFjSGdnTVRod2VDQXlNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ6YjJ4cFpEdGliM0prWlhJdGRHOXdMV052Ykc5eU9pQWpSVVZGUlVWRk8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSE53WVc0K1BDOXpjR0Z1UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdENna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNVGh3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9jaUJqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJSE4wZVd4bFBTSmliM0prWlhJdFltOTBkRzl0TFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxc1pXWjBMV052Ykc5eU9tNXZibVU3SUdKdmNtUmxjaTF5YVdkb2RDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRZbTkwZEc5dExYZHBaSFJvT2pBN0lHSnZjbVJsY2kxc1pXWjBMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXlhV2RvZEMxM2FXUjBhRG93T3lCdFlYSm5hVzR0ZEc5d09qQTdJRzFoY21kcGJpMXlhV2RvZERvd095QnRZWEpuYVc0dFltOTBkRzl0T2pBN0lHMWhjbWRwYmkxc1pXWjBPakE3SWlBdlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclQzVjBaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nT1hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlITjBlV3hsUFNKM2FXUjBhRG94TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTVRBd0pUdHRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUF3TzNCaFpHUnBibWN0Y21sbmFIUTZJREU0Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHdZV1JrYVc1bkxXeGxablE2SURFNGNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8zZHZjbVF0WW5KbFlXczZJR0p5WldGckxYZHZjbVE3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Wm05dWRDMXphWHBsT2lBeE1uQjRPMnhwYm1VdGFHVnBaMmgwT2lBeE5UQWxPM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdJajVRYkdWaGMyVWdaRzhnYm05MElISmxjR3g1SUhSdklIUm9hWE1nWlMxdFlXbHNMaUJVYUdVZ2MyVnVaR1Z5SUdWdFlXbHNJR0ZrWkhKbGMzTWdhWE1nYm05MElHMXZibWwwYjNKbFpDNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pSbTl5SUdGdWVTQnhkV1Z6ZEdsdmJpd2djR3hsWVhObElEeGhJR2h5WldZOUltMWhhV3gwYnpwamIyNTBZV04wUUhCc1lYUm1iM0p0Tmk1cGJ5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHQwWlhoMExXUmxZMjl5WVhScGIyNDZJSFZ1WkdWeWJHbHVaVHNpUG5ObGJtUWdkWE1nWVNCdFpYTnpZV2RsUEM5aFBpNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6ZEhKdmJtYytVR3hoZEdadmNtMGdOaUJpZVNCQmJXRnNkRzhnVkdWamFHNXZiRzluYVdWelBDOXpkSEp2Ym1jK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNjS3BKbTVpYzNBN0pIc3VibTkzUDNOMGNtbHVaeTU1ZVhsNWZTWnVZbk53TzBOdmNIbHlhV2RvZEM0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNDhMMlJwZGo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRazhMM1J5UGdvSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1R3aExTMGdMeThnUlU1RUlGUkZUVkJNUVZSRklDMHRQZ29KQ1FrOEwzUmtQZ29KQ1R3dmRISStDZ2s4TDNSaFlteGxQZ29KUEM5alpXNTBaWEkrQ2p3dlltOWtlVDRLUEM5b2RHMXNQZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjUxMjY2fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU5ODgyNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1MDcsXCJyZXZpc2lvbklkXCI6XCJkMWZhY2FkMDlkMWI2MjVkZDA3ZTM2NWIxY2NkMTE1YlwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvVHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkFwcGxpY2F0aW9uXFxcIiBhbmQgVmFsdWU9XFxcInA2X2RlbW9cXFwiXScgLCBjb250ZW50KTtcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcInRhcmdldERhdGFTb3VyY2VOYW1lXCI6bnVsbCxcImRlZmluZWRQYXJhbWV0ZXJzXCI6e30sXCJjYWNoaW5nT3ZlcnJpZGVcIjpmYWxzZSxcImFwcGVuZFRhcmdldERhdGFTb3VyY2VcIjpmYWxzZX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MDd9XX0=", "enabled": false, "version": "0.10.0", "installed": false, "signature": "hC51RvJEqT35PFeY6VdDDc7EiEZGGqshvJCdidPZXYPkHjApL6L+ddV0qL5t8tqE8hzb9aS6Rtt5aPKkgxuZeibkedDvTou+4chv/4xLMdXJlQJESxBik+als34DHQMHcZ1hTpka3OlXhU+exYJ6ZUPBcpzNxXa/NxyK+HkRa60=", "createDate": 1567442840607, "expiryDays": 0, "revisionId": "0377893acaab5a33abea7634981e39fb", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1568905076402, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-beta-1", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1568905076437 +\. + + +-- +-- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.activeroutingorder + ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.completedroutingorder + ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.failedroutingorder + ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.flyway_schema_history + ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank); + + +-- +-- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.transaction + ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4); + + +-- +-- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.rawbytes + ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2); + + +-- +-- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.serviceconfig + ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100'); + + +-- +-- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success); + + +-- +-- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); + + +-- +-- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); + + +-- +-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype); + + +-- +-- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops); + + +-- +-- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype); + + +-- +-- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text)); + + +-- +-- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text)); + + +-- +-- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres +-- + +GRANT ALL ON DATABASE b2box TO b2box; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) +-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +DROP DATABASE postgres; +-- +-- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE postgres OWNER TO postgres; + +\connect postgres + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE postgres IS 'default administrative connection database'; + + +-- +-- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA b2head; + + +ALTER SCHEMA b2head OWNER TO postgres; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database cluster dump complete +-- + diff --git a/reference_data/SNAPSHOT/reference.sql b/reference_data/SNAPSHOT/reference.sql index 83c1367..1c04bef 100644 --- a/reference_data/SNAPSHOT/reference.sql +++ b/reference_data/SNAPSHOT/reference.sql @@ -1,842 +1,842 @@ --- --- PostgreSQL database cluster dump --- - -SET default_transaction_read_only = off; - -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; - --- --- Drop databases (except postgres and template1) --- - -DROP DATABASE b2box; - - - - --- --- Drop roles --- - -DROP ROLE b2box; -DROP ROLE postgres; - - --- --- Roles --- - -CREATE ROLE b2box; -ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4'; -CREATE ROLE postgres; -ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS; - - - - - - --- --- PostgreSQL database dump --- - --- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) --- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - -UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1'; -DROP DATABASE template1; --- --- Name: template1; Type: DATABASE; Schema: -; Owner: postgres --- - -CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; - - -ALTER DATABASE template1 OWNER TO postgres; - -\connect template1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres --- - -COMMENT ON DATABASE template1 IS 'default template for new databases'; - - --- --- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres --- - -ALTER DATABASE template1 IS_TEMPLATE = true; - - -\connect template1 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres --- - -REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; -GRANT CONNECT ON DATABASE template1 TO PUBLIC; - - --- --- PostgreSQL database dump complete --- - --- --- PostgreSQL database dump --- - --- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) --- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres --- - -CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; - - -ALTER DATABASE b2box OWNER TO postgres; - -\connect b2box - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box --- - -CREATE SCHEMA p6core; - - -ALTER SCHEMA p6core OWNER TO b2box; - --- --- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: --- - -CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; - - --- --- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; - - --- --- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box --- - -CREATE TYPE p6core.itempartitiontype AS ENUM ( - 'LOG', - 'TABLE_DATA', - 'TRANSACTION' -); - - -ALTER TYPE p6core.itempartitiontype OWNER TO b2box; - --- --- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box --- - -CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text - LANGUAGE sql IMMUTABLE STRICT - AS $$ - - - select array_to_string (texts, sep) - - - $$; - - -ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.activeroutingorder ( - name character varying(512) NOT NULL, - content xml NOT NULL -); - - -ALTER TABLE p6core.activeroutingorder OWNER TO b2box; - --- --- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.completedroutingorder ( - name character varying(512) NOT NULL, - content xml NOT NULL -); - - -ALTER TABLE p6core.completedroutingorder OWNER TO b2box; - --- --- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.failedroutingorder ( - name character varying(512) NOT NULL, - content xml NOT NULL -); - - -ALTER TABLE p6core.failedroutingorder OWNER TO b2box; - --- --- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.flyway_schema_history ( - installed_rank integer NOT NULL, - version character varying(50), - description character varying(200) NOT NULL, - type character varying(20) NOT NULL, - script character varying(1000) NOT NULL, - checksum integer, - installed_by character varying(100) NOT NULL, - installed_on timestamp without time zone DEFAULT now() NOT NULL, - execution_time integer NOT NULL, - success boolean NOT NULL -); - - -ALTER TABLE p6core.flyway_schema_history OWNER TO b2box; - --- --- Name: item; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.item ( - datapartition p6core.itempartitiontype NOT NULL, - datatype character varying(64) NOT NULL, - iid1 character varying(256) NOT NULL, - iid2 character varying(96) NOT NULL, - iid3 character varying(96) NOT NULL, - iid4 character varying(96) NOT NULL, - content xml NOT NULL, - inserttime bigint -) -PARTITION BY LIST (datapartition); - - -ALTER TABLE p6core.item OWNER TO b2box; - --- --- Name: log; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.log PARTITION OF p6core.item -FOR VALUES IN ('LOG'); - - -ALTER TABLE p6core.log OWNER TO b2box; - --- --- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.rawbytes ( - id1 character varying(96) NOT NULL, - id2 character varying(96) NOT NULL, - content bytea NOT NULL, - inserttime bigint -); - - -ALTER TABLE p6core.rawbytes OWNER TO b2box; - --- --- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.serviceconfig ( - id1 character varying(512) NOT NULL, - id2 character varying(256) NOT NULL, - id3 character varying(256) NOT NULL, - content jsonb NOT NULL, - bytes bytea, - inserttime bigint -); - - -ALTER TABLE p6core.serviceconfig OWNER TO b2box; - --- --- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.table_data PARTITION OF p6core.item -FOR VALUES IN ('TABLE_DATA'); - - -ALTER TABLE p6core.table_data OWNER TO b2box; - --- --- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box --- - -CREATE TABLE p6core.transaction PARTITION OF p6core.item -FOR VALUES IN ('TRANSACTION'); - - -ALTER TABLE p6core.transaction OWNER TO b2box; - --- --- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.activeroutingorder (name, content) FROM stdin; -\. - - --- --- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.completedroutingorder (name, content) FROM stdin; -\. - - --- --- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.failedroutingorder (name, content) FROM stdin; -\. - - --- --- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin; -1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t -2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t -3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t -4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t -5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t -6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t -7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t -8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t -9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t -10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t -11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t -12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t -13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t -14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t -15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t -16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t -17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-06 12:59:24.811813 33 t -18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql 2012373981 b2box 2019-09-06 12:59:24.884128 14 t -19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-06 12:59:24.913329 11 t -20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-06 12:59:24.93409 169 t -21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql 791640323 b2box 2019-09-06 12:59:25.121487 10 t -\. - - --- --- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; -\. - - --- --- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin; -\. - - --- --- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin; -Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "enabled": true, "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 -Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "enabled": true, "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 -_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "enabled": false, "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 -WorkflowTask datamodels {"name": "WorkflowTask", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "05d747b40331bffd64ce9f7aa64c7692", "contentMode": "READ", "description": {"EN": "WorkflowTask Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1562691470454} \N 1562691470561 -2c101aa8e2234e1baf8bbd278ce3732d p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "2c101aa8e2234e1baf8bbd278ce3732d", "appKey": "p6_demo", "status": "6.0.0-beta-1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi52aWV3cyIsIm5hbWUiOiJXb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldvcmtmbG93IFRhc2tzIGZvciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NzgsXCJyZXZpc2lvbklkXCI6XCIyMGY2MTFlYjg2MzUzYjdhNzk3ZGQ2Y2Y3NmQ2ZGExM1wiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1Nzh9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDAzLFwicmV2aXNpb25JZFwiOlwiZjA1MDM1NzA2NGJiMmVmYWU4NTQ3ZmVmZGYzYmY2ZDRcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDAzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTc3ODk3OTgsXCJyZXZpc2lvbklkXCI6XCJmZmM2MTA4MTEzNDU2M2RkODMyZWEwMTI0NTdjODhmNVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIHJvdXRlSWQgPSBcXFwicDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRc1xcXCJcXG5cXG50cnkge1xcbiAgICBwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgICAgIGZyb20oXFxcInRpbWVyOi8vbXlUaW1lcj9wZXJpb2Q9MTBtXFxcIilcXG4gICAgICAgICAgICAgICAgLnRvKCdwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5DcmVhdGVSRlFUcmFuc2FjdGlvbicpXFxuICAgICAgICAgICAgICAgIC5yb3V0ZUlkKHJvdXRlSWQpXFxuICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbihyb3V0ZUlkKVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBwNi51dGlscy5wYXVzZSgpXFxufSBmaW5hbGx5IHtcXG4gIHA2LmNhbWVsLmRlc3Ryb3lSb3V0ZShyb3V0ZUlkKVxcbn1cXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTc3ODk3OTh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDI4LFwicmV2aXNpb25JZFwiOlwiMzlkYTE5NmNkNGNkNTM4YjJiMmU1ZTE1MWU0ZGQ4ZTZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcdGRlZiB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUkZRcz9jcm9uPTArMSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJGUXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UkZRcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUXVvdGVzP2Nyb249MCsyKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UXVvdGVzIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19BY2NlcHRlZD9jcm9uPTArMysqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRBY2NlcHRlZFBPcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfUmVqZWN0ZWQ/Y3Jvbj0wKzQrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UmVqZWN0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X0ZhaWxlZFJvdXRpbmdPcmRlcnM/Y3Jvbj0wKzAvMTUrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMgY291bnRlclxcXCIpXFxuXFx0fVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDI4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5ODQyMjU0OCxcInJldmlzaW9uSWRcIjpcIjc1YTUxMTc2Mjc1MWI5N2U0ODUzYzA0Zjc2MDZlMDRhXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgZXRoQ2xpZW50VVJMID0gcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdjb250cmFjdEFkZHJlc3MnKVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oXFxcIndlYjNqOi8vXFxcIiArIGV0aENsaWVudFVSTCArIFxcXCI/YWRkcmVzcz1cXFwiICsgY29udHJhY3RBZGRyZXNzICsgXFxcIiZvcGVyYXRpb249RVRIX0xPR19GTE9XQUJMRVxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5ODQyMjU0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc4OTkzNzUzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZCgncDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXMnKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzgwN31dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJBcHBDb25maWciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJBcHBDb25maWdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQXBwbGljYXRpb24gQ29uZmlndXJhdGlvbiBUYWJsZVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUzMyxcInJldmlzaW9uSWRcIjpcImY1OTkzMWM0M2Q3YjlkNTc5NzE3ODIxM2FiOTQxMDVkXCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwia2V5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInZhbHVlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInR5cGVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH1dLFwia2V5c1wiOltcImtleVwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MzN9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgyMTksXCJyZXZpc2lvbklkXCI6XCIyOWZmMTM4Y2MzYTliOTk3ZjE1ZDUwMWUzZjljZTc5NFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjE5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRhcHQgV29ya2Zsb3cgU3RlcHMgb24gdGhlIGZseSBsZXZlcmFnaW5nIGEgV29ya2Zsb3cgU3RlcCB1c2VkIGFzIHRlbXBsYXRlIChvcHRpb25hbClcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4MjEsXCJyZXZpc2lvbklkXCI6XCIwOGQyOWRhZWJhN2E0NmNiMjhiYTAwZWZlZDNmYTc0ZVwiLFwibWFpblNjcmlwdFwiOlwicDYucGlwZWxpbmUudmFyaWFibGVzKCkuZWFjaCgpIHsgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIH1cXG5cXG5kZWYgd29ya2Zsb3dTdGVwID0gcDYucGlwZWxpbmUuZ2V0WG1sICd0ZW1wbGF0ZVN0ZXBYbWwnXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy9kZWYgdHJhbnNhY3Rpb25JbmZvID0gcGlwZWxpbmUuZ2V0WG1sICdfREVGQVVMVF8nXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogIEFERCBPTkUgUEFSQU1FVEVSIEJZIExJTkUgVE8gQUNUSU9OICAgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG5kZWYgbXlBY3Rpb24gPSB3b3JrZmxvd1N0ZXAuQWN0aW9ucy5BY3Rpb24uZmluZHtpdC5AaWQgPSAnc2VuZCd9XFxuXFxuaW50IG5iTGluZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnTGluZSBpdGVtcyd9LlZhbHVlLnRleHQoKSlcXG5cXG5kZWYgc3RlcFhtbCA9IGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUoIHdvcmtmbG93U3RlcCApXFxuXFxucDYucGlwZWxpbmUucHV0ICdzdGVwWG1sJywgc3RlcFhtbFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4MjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJJbml0aWFsaXplQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJbml0aWFsaXplQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVwbG95IEJ1bmRsZWQgUmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIFRhYmxlc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTY3OSxcInJldmlzaW9uSWRcIjpcIjc5MDY0ZDkwMmQyZjg3YTVkODE2NjQ4ZmZiNzM2Zjk5XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai50eC5yZXNwb25zZS5Qb2xsaW5nVHJhbnNhY3Rpb25SZWNlaXB0UHJvY2Vzc29yXFxuXFxuXFxuLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnTG9hZGVkIGJ1bmRsZWQgcmVzb3VyY2VzJ1xcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcblN0cmluZyBQNl9UTVAgPSBTeXN0ZW0uZ2V0ZW52KCdCMkJPWF9UTVAnKVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6IFxcXCJmaWxlOi8vLyRQNl9UTVAvcDZfZGVtb19pdGVtcy5jc3ZcXFwiIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDM5OTM1Njc5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODkxMjg0NCxcInJldmlzaW9uSWRcIjpcIjRmMzA5MjhhYjA2YTRhYzhhNWZjNWU0MjA4MjczYzhkXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMDg5MTI4NDR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSZWNlaXZlUkZRVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSZWNlaXZlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYW4gUkZRIChjcmVhdGlvbiBvZiB0aGUgUkZRIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbeKApikgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODIzMixcInJldmlzaW9uSWRcIjpcImQ1YmJhYjk4ZGMxMDljYmIxY2M2Y2FmNjZmNzIwYzM0XCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbi8vIFRoaXMgc2NyaXB0IHJlYWRzIHRoZSBpbmNvbWluZyBSRlEsIHBhcnNlcyBpdHMgY29udGVudCBhbmQgd3JpdGVzIHRoZSB0cmFuc2FjdGlvbiBpbiBQNiBkYXRhYmFzZSB1c2luZyBpdHMgaW50ZXJuYWwgVHJhbnNhY3Rpb25JbmZvIG1vZGVsIChjaGVjayB0aGUgRGF0YSBNb2RlbHMgbWVudSBmb3IgbW9yZSBpbmZvKVxcbmRlZiByZnFDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIGFwcGxpY2F0aW9uSWQgPSAnRGVtb0FwcCdcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG48L1RyYW5zYWN0aW9uSW5mbz5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjMyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0NTQsXCJyZXZpc2lvbklkXCI6XCI5MWY3MzM2ZTk2ZjkyOTI5NDg0OWI0YWVjZGJhNjQxYlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODQ1NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTYxMixcInJldmlzaW9uSWRcIjpcImRhOTliZGFjMjM3YWRkOTMyYWM2ZTc1MmI1YjBiYmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzQzOTkzNTYxMn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NzI0Nzg4OSxcInJldmlzaW9uSWRcIjpcImI2ZjZmMzYzOTJhNTNiZjUzNDg0OWY0NDYwY2Q5NWQwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0Nzg4OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MzEwLFwicmV2aXNpb25JZFwiOlwiNjM2M2MyY2U0N2NkZGY2NDI1MzdkMTc0MzQ2MWFjOTBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODMxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ2NjIsXCJyZXZpc2lvbklkXCI6XCJmNTI4NjA2ODQ1MjEyZDJjM2U5OGJjNDc1YjZiMTY4MlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImNvbXBpbGVkQ29udGVudFwiOm51bGwsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ2NjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDI2Njc0MTUsXCJyZXZpc2lvbklkXCI6XCJmNDc2NGE1ZWM1Yjg1MTk0OTk3ZjAyMTZkY2RjNTIxMFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQyNjY3NDE1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDEwMDM0NzgzLFwicmV2aXNpb25JZFwiOlwiMDg4ZjYyZGMwMWEzODMwZTUwMWUxNmM0ZTIzZjhjZWZcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0NzgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc5MDYsXCJyZXZpc2lvbklkXCI6XCI3YTE4NDhlZDZkMGIzMGNiYTRlM2M5NjA2NTZmZTJmMFwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcF9EZXYnXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHF1b3RlLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHF1b3RlLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC50ZXh0KClcXG5kZWYgdG90YWxDdXJyZW5jeSA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKVxcblxcbmRlZiBxdW90ZUlkID0gcXVvdGUuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcXVvdGUuTm90ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHF1b3RlLlF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdQdXJjaGFzZU9yZGVyJ1xcbmRlZiBwdXJjaGFzZU9yZGVySWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1F1b3RlL1xcXCIgKyBxdW90ZUlkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9QdXJjaGFzZU9yZGVyL1xcXCIgKyBwdXJjaGFzZU9yZGVySWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgb3JkZXJMaW5lcyA9ICcnXFxuXFxucXVvdGUuUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+XFxuXFxuICAgIG9yZGVyTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpPcmRlckxpbmU+XFxuICAgIDxjYmM6Tm90ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTm90ZS50ZXh0KCkpfTwvY2JjOk5vdGU+XFxuICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfTwvY2JjOlF1YW50aXR5PlxcbiAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC50ZXh0KCkpfTwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+XFxuICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC50ZXh0KCkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkudGV4dCgpKX08L2NiYzpCYXNlUXVhbnRpdHk+XFxuICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5EZXNjcmlwdGlvbi50ZXh0KCkpfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOkl0ZW0+XFxuICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgPC9jYWM6T3JkZXJMaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuXFxuZGVmIG9yZGVyQ29udGVudCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPE9yZGVyIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpPcmRlci0yXFxcIlxcbiAgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiXFxuICB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMTwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPnVybjp3d3cuY2VuYmlpLmV1OnRyYW5zYWN0aW9uOmJpaWNvcmV0cmRtMDAxOnZlcjEuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCJCSUlcXFwiIHNjaGVtZUlEPVxcXCJQcm9maWxlXFxcIlxcbiAgICA+dXJuOnd3dy5jZW5iaWkuZXU6cHJvZmlsZTpCSUkwMTp2ZXIxLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHB1cmNoYXNlT3JkZXJJZCl9PC9jYmM6SUQ+XFxuICA8Y2JjOklzc3VlRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvY2JjOklzc3VlRGF0ZT5cXG4gICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZT5JbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgd2hvbGUgb3JkZXI8L2NiYzpOb3RlPlxcbiAgPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TRUs8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5cXG4gIDxjYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlByb2plY3QxMjM8L2NiYzpBY2NvdW50aW5nQ29zdENvZGU+XFxuICA8Y2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlF1b3RlSUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlJqZWN0ZWRPcmRlcklEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+TUFGTzwvY2JjOklEPlxcbiAgPC9jYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpDb250cmFjdD5cXG4gICAgPGNiYzpJRD4zNDMyMjwvY2JjOklEPlxcbiAgICA8Y2JjOkNvbnRyYWN0VHlwZT5GcmFtZXdvcmtBZ3JlZW1lbnRJRDEyMzwvY2JjOkNvbnRyYWN0VHlwZT5cXG4gIDwvY2FjOkNvbnRyYWN0PlxcbiAgPGNhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcyMzExMTE1PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcwMDExMTE1PC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MTIzNDU2Nzg5MDEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PlBvQm94MTIzPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5Sw6VkaHVzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT4ybmQgZmxvb3I8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlB1cmNoYXNpbmcgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkpvaG5zc29ucyBCeWdndmFyb3IgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMxMTgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAyMzQ3MjMxMTExPC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlNlbGxlclBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NTQzMjExMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD4zMjE8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkt1bmdzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5zdWl0ZTEyPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjIyPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+U2FsZXMgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMjI4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY3ODMyMTEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAke29yZGVyTGluZXN9XFxuPC9PcmRlcj5cXG5cXG5cXFwiXFxcIlxcXCJcXG5cXG5cXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIG9yZGVyQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwdXJjaGFzZU9yZGVySWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UHVyY2hhc2UgT3JkZXI8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cHVyY2hhc2VPcmRlcklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT4gICAgXFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3OTA2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4NjcsXCJyZXZpc2lvbklkXCI6XCJhZmUwNzhkYzQ3MjEzYzA4YmYxMTJkNjdhZTUyNTM4NFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4Njd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJsb2NrY2hhaW5cIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0MTIsXCJyZXZpc2lvbklkXCI6XCI2MmExZjI0NmMyZmZlZDU0ZmFiOGVkOGJjOGVkMjhjYlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiB0b3BpY3MgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ1RvcGljcycpLnNwbGl0KCcsJylcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ0RhdGEnKVxcblxcbmlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUkZRUmVjZWl2ZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIHA2LnBpcGVsaW5lLnB1dChcXFwidWJsXFxcIiwgdWJsKVxcbiAgICBwNi5jb250cm9sLmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0MTJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MTQ0NjI5MixcInJldmlzaW9uSWRcIjpcIjA3MzAxYjEwZGVhM2U4NzE0NWE4MmFiNWUwNjA2MGEwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQxNDQ2MjkyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ5MDIsXCJyZXZpc2lvbklkXCI6XCIxNTBkMGU3MDhhOGRlNTc1YTc1ZTQzNTE5OGRmMGU3MlwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0OTAyfV0sInBsYXRmb3JtNi5jb3VudGVycyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgUkZRcyB3aXRoIFxcXCJSZWNlaXZlZFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDAwNjAwNTYsXCJyZXZpc2lvbklkXCI6XCI3YTYwYTAyZjViYzFiOWY4ZmVlNWY0YjZjMzJiYjMzZVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2NzQ0MDA2MDA1NixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDAwNjAwNTZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTcyMDA1MSxcInJldmlzaW9uSWRcIjpcImQxMWE1YzM1YzA4ODMzMjQ4OTRlOGRjOWM4MzRjNTNmXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDExNzIwMDUwLFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTE3MjAwNTF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgRmFpbGVkIFJvdXRpbmcgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MjcwMDEyMSxcInJldmlzaW9uSWRcIjpcImI1YjVlYWUyZmNmM2QwNGMzMTJhOGZkNjg5NDBmYTI3XCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3NDQyNzAwMTIwLFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDI3MDAxMjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODI0MDAzNSxcInJldmlzaW9uSWRcIjpcIjBkMjYwM2ZkYTY2Mjc4MzQ3ZWY1Y2ViN2JhMjA3ZjAzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDA4MjQwMDM1LFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlB1cmNoYXNlIE9yZGVyXFxcIiBdW0Z1bmN0aW9uYWxTdGF0dXNDb2RlID0gXFxcIlJlamVjdGVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91c0BhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAwODI0MDAzNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDA4MTgwMDkwLFwicmV2aXNpb25JZFwiOlwiMjc5YmM0YTMyZjZmYThkNDA2YWZkZTRkODU0M2U0ZWZcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjcwMDgxODAwOTAsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDA4MTgwMDkwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTY1LFwicmV2aXNpb25JZFwiOlwiMzFhYmNjZWUwYmE1Zjc0NWY3NjlhMjE5NDNiMmE2YTRcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTY1fV0sInBsYXRmb3JtNi5kYXRhbW9kZWxzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5kYXRhbW9kZWxzIiwibmFtZSI6IlRyYW5zYWN0aW9uSW5mbyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uSW5mb1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbkluZm8gZGF0YW1vZGVsXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTM0LFwicmV2aXNpb25JZFwiOlwiNzMyZWFjNmEwMzViOTdjZDgzNjViY2U4Y2I3YmU3NWRcIixcInNjaGVtYVwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNkOnNjaGVtYSB4bWxuczp4c2Q9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXFxcIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD1cXFwidW5xdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgYmxvY2tEZWZhdWx0PVxcXCJcXFwiXFxuICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PVxcXCJxdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgZmluYWxEZWZhdWx0PVxcXCJcXFwiPlxcbiAgIDx4c2Q6ZWxlbWVudCBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDcmVhdGlvbkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZVN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXRTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU2VuZGVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkZpbmFsUmVjaXBpZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zZmVyUHJvdG9jb2xcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGVsaXZlcmVkVmlhXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRzXFxcIi8+XFxuXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbGFnc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIk9yZ1BhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3Vlc1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXVkaXRUcmFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlJlY29yZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIldvcmtmbG93XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGSW5zdGFuY2VzXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgPHhzZDp1bmlxdWUgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIj5cXG4gICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPVxcXCIuXFxcIi8+XFxuICAgICAgICAgPHhzZDpmaWVsZCB4cGF0aD1cXFwiSWRcXFwiLz5cXG4gICAgICA8L3hzZDp1bmlxdWU+XFxuICAgPC94c2Q6ZWxlbWVudD5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUaHJlYWRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQnVzaW5lc3NEb2NOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VDb250ZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIktleVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJMZXZlbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlBhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkxpc3RPZlZhbHVlc1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsb3dOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkFjdGl2ZUluc3RhbmNlSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJbnN0YW5jZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkluc3RhbmNlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJsYXN0VXNlckVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJmbGlua1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJGTElOS1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJzdGVwXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGU3RlcFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGU3RlcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGVwSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFjdGlvbmVkQnlFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhc3NpZ25lZFRvTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZXNcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIiB0eXBlPVxcXCJXRkFzc2lnbmVlc1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJwYXJhbWV0ZXJcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkZMSU5LXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInZpZXdcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJ0eXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkFzc2lnbmVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiPlxcbiAgICAgICAgIDx4c2Q6YW55IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lc3BhY2U9XFxcIiMjYW55XFxcIiBwcm9jZXNzQ29udGVudHM9XFxcImxheFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbjwveHNkOnNjaGVtYT5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5MzR9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTMxMzY4MyxcInJldmlzaW9uSWRcIjpcImYyYTBlYzk2ZDFjZmZkODdiMWQxMjA0ZmFmZWRlZDcxXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtmbG93VGFza0VuaGFuY2VyXFxcIi8+XFxuICAgIFxcbiAgICA8QXNzaWduZWUgbmFtZT1cXFwiRGVtb0FwcFxcXCIgcGF0aD1cXFwiLyR7SU5TVEFOQ0VfSUR9XFxcIiB0eXBlPVxcXCJVTklUXFxcIiBzY29wZT1cXFwiKj0qXFxcIj5cXG4gICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICA8RU4+U3VwcGxpZXI8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Gb3Vybmlzc2V1cjwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L0Fzc2lnbmVlPlxcbiAgICBcXG5cXHQ8U3RhdHVzTGFiZWxzPlxcblxcdCAgICA8TGFiZWwgbmFtZT1cXFwiUmVjZWl2ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVjZWl2ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZcOndWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJDcmVhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkNyZWF0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5DcsOpw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVwcmVjYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZXByZWNhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+QW5udWzDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJQcm92aWRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5RdW90ZSBwcm92aWRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlF1b3RhdGlvbiBmb3VybmllPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVjbGluZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVjbGluZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Ew6ljbGluw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJzZW5kXFxcIiBzdGF0dXM9XFxcIlByb3ZpZGVkXFxcIiB0eXBlPVxcXCJGT1JNXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uUHJvdmlkZVF1b3RlXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPlByb3ZpZGUgUXVvdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Rm91cm5pciBRdW90YXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuXFxuICAgICAgICAgICAgPEZvcm1HZW5lcmF0b3I+cDZfZGVtby5XRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb248L0Zvcm1HZW5lcmF0b3I+XFxuICAgICAgICAgICBcXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnJmcTwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPnJmcTwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+cmZxPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5saW5lczwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPmxpbmVzPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5saW5lczwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJkZXByZWNhdGVcXFwiIHN0YXR1cz1cXFwiRGVjbGluZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLXRpbWVzLGJ0bjpidG4tZGFuZ2VyLGNvbG9yOmRhbmdlcjwvU3R5bGU+IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkRlY2xpbmU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RMOpY2xpbmVyIHF1b3QuPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuXFx0ICAgICAgICAgICAgPE5hbWU+cmVhc29uPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+UmVhc29uPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5Nb3RpZjwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUQVJFQTwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImV4cGlyZVxcXCIgc3RhdHVzPVxcXCJFWFBJUkVEXFxcIiB0eXBlPVxcXCJFWFBJUkVcXFwiIGRpc3BsYXk9XFxcImZhbHNlXFxcIj5cXG5cXHRcXHRcXHQ8RXhwaXJ5IGVycm9yPVxcXCJmYWxzZVxcXCIvPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgIDwvQWN0aW9ucz5cXG4gICAgXFxuPC9Xb3JrZmxvd1N0ZXA+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDExMzEzNjgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUHVyY2hhc2VPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVB1cmNoYXNlT3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWNjZXB0IG9yIFJlamVjdCB0aGUgT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTEzMDI0MTIsXCJyZXZpc2lvbklkXCI6XCI4NWIzZmI0YjEzNDk1NGMxYzI2YjU4YjNjMTExNzkwZVwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5QdXJjaGFzZU9yZGVyIC0gQWNjZXB0IG9yIHJlamVjdDwvRU4+XFxuICAgICAgICA8RlI+Q29tbWFuZGUgLSBBY2NlcHRlciBvdSByZWZ1c2VyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz50cnVlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke0IyQk9YX0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAxMTMwMjQxMn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTgyMzc0NzYxLFwicmV2aXNpb25JZFwiOlwiYzYxMzI0YmI4ZGFiZTExMjFiZGU2MjczYjBiYzgwNzNcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUU2YTJrNExsNHRkbkFBQUFCRUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56ckVPZ2pBUUJ1Q2RoSGZvQ3h5aFlCQzdpUzZhTUVrYzNKcjJqQmRwYWNwSjR0c0xJMkZ4L2UrL0wzK3JQVDF4WkxoakhHbndTc2dzVDVPTEN6MDY5S3g1RHFFajdsRUppMjRBSFFLTVRrY0dNM2lPMnZDbXZyWnVBUTA5eWZ4SE5SL3FMVnp0RzVhL2hhZzMvbG56VEJTNVBFQmVRVkYxY3E5a3JZcnlrU2FuaVBQVlF2TlZvdFVUZW5HTTVrVVRSbEZtdSsyZTlkWTArUUZRU3dNRUNnQUFDQUFBVHByYVRnQUFBQUFBQUFBQUFBQUFBQWtBQUFCTlJWUkJMVWxPUmk5UVN3TUVDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUFNQUFBQnBieTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQTBBQUFCcGJ5OXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVNBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzREJBb0FBQWdBQUUyYTJrNEFBQUFBQUFBQUFBQUFBQUFWQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQWtBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzREJBb0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUE4QUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzREJCUUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpRdVkyeGhjM09WVWwxUEUwRVVQVk9XcmkyclZGUVVVZU1ETVMyWURrSGtCZEtYUmhKTjFRalk5OW5kMnpKa08xTm5aekg4STE1OU1DUTgrQVA0VWNTN0N3L0dHQU9aek55UE9mZk9PWk43Y1huK0M4QW1YalF3ZzhVbUFqd084U1RFa2tEZEgrcDhaVjFnYmFDdG5HYktqNnliYk1tVUpsYm1pZHlqYndYbGZ0ZTZMNFgxeW10cjhtMHUyOUZHKzU1QXQzMkx1czVRSU9qYmxBVG1COXJRcDJJU2t6dFFjY2FaaFlGTlZEWlVUcGZ4ZFRJbzZRbEU3NDBoMTg5VW5oT0gzWnUvdWJLeHlYUWIrM3BzbEM4Y3Qvd3dzRzRzdjFQODVraXFXTXVEa3ludDBZZ2NtWVIyL3JwTUZmZGhRQzdIeEF5VXAxUisxY1p2dk4zYTduSGo1cjR0WEVLN3VpUzc5QzhDM1NOMXJGanZPNU5rTnRkbS9KSDhvVTFEUEkyd2pHY1JabEdQRU9LNXdPdmJxQkpZL284T2djNk5td25NbWRoOUhwV1o4bmRmdFR0Ly9NTFVXVzhUbThuRU91TDZDWVA2S3N0WS9FeTdNOFJMSHFtQXAwdTBXcVdVMHVNZDRnN2JCbnM5MUhnQnpkVzFueENyWjZqOTRLaUdKcC8xQ251S09UNFhyMUNJY0Erb3ZObnFQc0I4aFcvaGZtVVg4SUJ0Z0lkNGhMc1Zqb2xVRmZnTlVFc0RCQlFBQUFnSUFFMmEyazZ3NEpEeG13RUFBT0FDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UZ3VZMnhoYzNPVlVsRnJFMEVRL2phOTVwcDRtbGkxV3F2U2h6NGtyV1FWUlFvdGVUQllFS0pnVS9QU3A4MWxrbTY1N01TOVBjV2Y1WU1JUHZnRC9GSGkzT21EaUVqTHNqc3pPOTgzTXgvTTl4OWZ2d0Y0aWdjTnJHQ2ppUWkzWTl5SnNhbFFEMmMyMzNta3NEZTBySmVaQ1RQMmkyZDZTZ3ZXZWFxUDZWMUJlVGhpLzZiZ1lJSmxseDhJN2RBNkcvb0t2YzRsZU4yeFFqVGdLU20waHRiUjYySXhJWDlpSnBuOHJBODVOZG5ZZUZ2R3Z6K2pjanlGNUtWejVBZVp5WE9Tc0hmeG5qdVA5MlhjeHNqT25RbUZsNUtESWZ1NS9rQ1RKK2ZhVEt3KytiaWtZNXFSSjVmUzRWL0pxWkU2QXNqMTJ6RGJId1Z2M2Z5Z0x4V2JJeTU4U2tlMm5ITHpYNTE3NSthOUVhRXZYSnB4THJ4WEZNNTRHdU51Z2kzY1M3Q0tlb0lZOXhVZVhrYU93dFovQkNoMEwxeE1ZVzFPb1l5RjF1bWNQdS8rb1g3cE9YREttVTdaazlBWGdocVlMQlB0SzUzdUdOdXlTcEZzbFdxM1N5V2xKemZHbXRpR2VIM1U1QUROM2IzUFVMdGZVUHNrVVExTmVlc1ZsbkZGM28xZktDUzRCbFRlYXBXUDBLcndiVnl2N0RwdWlJMXdFN2R3dGNMSklCVURQd0ZRU3dNRUZBQUFDQWdBVFpyYVRzU0M1K0JDQVFBQUdnSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpsVkZMUzhOQUVKN3RLMjJOVnVzRHhLc0hxK2dLaWhSYWVyQllFS0pnVzN2ZkpOTjJTN3BiTnh2Rm4rVko4T0FQOEVlSmsraEpSSFJnWHQvTWZEdkR2cjIvdkFMQUtXeFZJUTkxQjlZZDJHQlFha3NsYllkQmZxOHhZbERvNmhBWjFEeXA4RHFaKzJpR3dvOElxWHM2RU5GSUdKbm1YMkRCVG1YTXdMMVVDazAzRW5HTWxCNTZVdk5GSk94WW0va1pEM0d1ZVJ6d1B0NGxHTnVlTmplSnRzSktyZUxkWm90QlpTQW5TdGpFRUdQWDAyYkNIOUEvbVhIaFN6NThYR0FmeDJoUUJkaitWZ3dGMFZCRHpHL3R1RG13UnFwSnEwT00xWUZPVElBOW1TNjUvZFBEUnpOeEwrak9DeFZFT3FhNUs3UlRIVHF3NlVJQmlnd08vbkVEZzUxZnRtYlErRE1YSEVPT2ZpY1ZSa3Fia0M5UnhNbW5TSEgvR2RnVEJUbHd5Sll5OEJ6S1pOM1BCcWpBVWpicVpsM0xzSkw1R3F4bTZCclphcWFNMEZUS0gxQkxBd1FVQUFBSUNBQk5tdHBPYW14THF6UUNBQUFhQkFBQUpBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjNDFTNzAvVFVCUTliK3ZXcnBUQktxSWdJcitVYlNBRm5IN1pRaUFJQ2NrQ1FuSEpZdnpRZFk5WjByV21QL1ozeVVqRWFEUjg5bzh5M2xjWEE1R0FyOG05T2UrZWUrNTVyKy9ucjY4L0FGUlF5VUhDb29vaVNqTEdaSlJWNUxFa3dyS0NFWldLeTRMeFhFRkI1QlVGdXNpR2pGVUc1WWpiM09ueE5zTk0zZkdOajY0Vm5maEI5NVhSNWwzZkNHM2phUGZRakt3b0RxdkVmczF0MS9FRWUvZ3c5aVArSnZCN1RsdGdlYUd4VlgrN1l6TE12cnRiS051ejNKaUhEUFBGMG4vUXBXMi96UmxHNmpSN1ArNjJlSEJzdFZ6YWtST2RneE9HU3JGK2F2VXN3N1c4am1GR2dlTjFxcVc3bGZXNmIxdHV3d29jSVRoUWxUeXJ5MFh0SDBWeVhuTThKOXBnR0w5aDRGNnBRZDNSQjRkT2xqT2Rqa2RUQWxKS0YwVkJxWW5MUzVyWHIvVHVlSEczZHBmVERScXRtbjRjMkh6WEVSNXp4enlNVm9TS2hudml0NDlwV01NNncvVHRTaG9tOEVMRE5KNW9HTUdvaG9JSU9rWVo4dGM5TVdSczEvZG8xbGl4ZE1YdlFldVUyeEg1ZVhuMUJyWmRLd3lyTi8yRDY2clZ6VlY2ZkhsNnVkTG1oSEFBVUM0TXNpN3k2S1E0a1dBZ2gvc1lCOE1EUW5PVXhWTDdZSitSdWtUNkV5R0doeFN6U1cyZitCT1lIUEFyU0NXN3FpNlZ2eUJ6Q1Vud1U5ZjRqeWhxZjFpWXd1T2tUbGREVVNpc0lVMGZJSmVYcGk2UVBidWxYY2FNc0k3WmhETUhCZk9KWVNIem5nNGkxdFkzU0UxZFRsOUFPVWN1QWFxVWdLRUVhSmtFREdlL0UwcjM2UVUxcFQ2R3pHYW1qMkh6SE96czczbFZHZ0ljWUpGTXBBWkRGL0EweWM5K0ExQkxBd1FVQUFBSUNBQk5tdHBPZ3dUMmhxTUJBQURqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTFMbU5zWVhOemxWTEJiaE14RUgxT3Q5a21MRFFVV2lnRnhLR0hwRVV4Q0ZwVmFwVURFUkZJQWFscHlRVUp5ZG1kYmwxdDdOVHJCZkZaSEJCU0QvMkFmbFRGN01JQklZUmFXZmJNZU42TTM3TjljWGwyRHVBbEhqY3doNVVtQXR3TGNUL0Vxa0RkSCt0OC9abkE1bEJiT2N1VVA3SnV1aTBUbWxxWngzSkVwd1hsZm1EZGZtRzk4dHFhZkpmTDlyVFJ2aWZRYlYranJqTVdDUG8ySVlIRm9UYjB2cGhPeUIycVNjWTdTME1icTJ5c25DN2ozNXRCU1U4Z2Vtc011WDZtOHB3NDdGNzl6UFhuVzB5M2NhQlRvM3podU9XYm9YV3AvRUtURnlkU1RiUTgvRHFqRVIyUkl4UFQzbC9KUkhFZkJ1UXlKV2FnUENYeWd6WitaN2ZIYlpzSHRuQXhEWFJKZGZWZngzZFAxR2ZGYWwrYk9MTzVOdWs3OHNjMkNmRWd3aG9lUnBoSFBVS0lSd0pQcjZOSllPMC9LZ1E2VjI3R2I1bVNIdzMyQmRydGo2ODZmMXpBekZsdlk1dkoyRHJpNHFuMTFGZFp4c3JuMnAweG52QnZDdmhqaVZhcjFGRjZQRU1zc0cydzEwT05COURjMlB3T3NmRUR0VzhjMWREa3RWNWhQK0VHcnl1L1VJaHdDNmk4K1NvZllMSEN0M0M3c2t1NHd6YkFYU3pqWm9WaklsVUZmZ0pRU3dNRUZBQUFDQWdBVFpyYVRzL0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUUyYTJrN0ZrczQ1b3dFQUFPWUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpNdVkyeGhjM09WVWwxUEUwRVVQVk9XcnEyckZGQVVVZU1ESVMyWWpnSGxCZEtYeGlhYXFxRmczMmQzYjh1UTdVeVpuZFg0Yy93SlBoZ1NIdndCL2lqajNkVUhZNHlCVE9aK3pKeDc1NXliK2Y3ajhodUE1M2pjd0FMV21naHdMOFQ5RU9zQ2RYK3E4ODFuQWp0RGJlVThVMzVpM1d4ZnBqU3pNay9raU00THl2M0F1cVBDZXVXMU5ma0JseDFxbzMxUG9OdStSbDFuTEJEMGJVb0NTME50NkcweGk4bWRxRGpqazVXaFRWUTJWazZYK2UvRG9LUW5FTDB5aGx3L1UzbE9uSGF2L3VibTdoN1RiUnpycVZHK2NOenk5ZEM2cWZ4SThkNlpWTEdXSjUvbU5LSUpPVElKSGY1MW1TcnV3NEJjVG9rWktFK3BmSytOMzMyeGY5RGp4czFqVzdpRUJyb2t1LzR2QXQwejlVR3gzcGNteVd5dXpmUU4rVk9iaG5nUVlRTVBJeXlpSGlIRUk0R24xMUVsc1BFZkhRS2RLemZqOFpqWXZadU1Ca2NjYjdVN2Y4eGc3cXkzaWMxa1loMXg5Y3g2NnFzc1kra0w3YzRZVC9oREJmeTNSS3RWQ2lrajNpRnVzRzl3MUVPTkY5RGMzdmtLc1gyQjJoZk9hbWl5clZmWXo3akpkdTBYQ2hGdUExVzBXTjBIV0tyd0xTeFhmZ1dyN0FQY3dWM2NxbkJNcEtyQVQxQkxBd1FVQUFBSUNBQk5tdHBPMkliNzBJRUJBQUNDQWdBQVNBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGSkdVVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjNlZSVFU4VVFSQjl2YnV3c0s3eW9TS29GeE1QNG9FK1NMeG9URnhrRTVLSmhzVnc4ZFF6VTh6MlpxWnI3ZTVaZjVjbkVnNzhBSDZVc1dZZzhRS0pDWmYzcXJvKyt2WHJxejhYbHdEMjhYS0FMcDcxc2RQSGM0VnV5WVhDWHNLKzBMOG9mVGZUYzgrUk15NTF4cDUwUlhIS2VkQ2V3cHhkSUoxdzhVR2hZM09CSHlPRkZSdENUZm5ucUxDVnpNekM2TXJFcVI3WjRzaEZLc2hMZDdkT1M0WE42M0pwWEtGUG9yZXVXYlQ4MFRvYlAwblBtOTFUaGQ0QjU2U3dsbGhIWCtzcUpmL2RwQ1UxdzV5Wjh0UjQyK1EzaDcwNHRVRmhlekkrbmxCR2RrSDU0WUpjbk55SVZSZ2VPVWYrb0RRaGtIUitTU3pyZVduaUdmdnF2YzZwWWgweVBhR2ZOWVU0Wm45Y2N6VFJ5dkRydTVhSzZNRUoxejZqc1cxRTdOdzJ2ZGM4ZFlnaEh2YnhRbUYwLzJzVjF2L1o5eTJkVVNhTzcvNzNYcnhDUi80ZDZFRjh3NUpFWWo3NkxhOWd0ZVVCSHJTc0d1R0NqeVRUYlE0c3ZUMkgraTFCQjJ1Q3k4MmhHbU5kNHVGMUF6YndwSzAvYlhFTGo0VUhVdXRnRzV0WS9RdFFTd01FRkFBQUNBZ0FUWnJhVHFJeTErZElBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTNMbU5zWVhOemxWRkxUd0l4RUo3S1l3RlJGQitKOGVwQk5GcmpBdzhRRGhKSk5LdUpnTnpMN3JDVUxDMTJ1eHAvbGljVEQvNEFmNVJ4ZHZWa2pORko1dlYxK3ZXYjlPMzk1UlVBam1HOUJCbW9PckRpd0NxRGZGTXFhVnNNTXR1MUFZTnNXL3ZJb09KS2hkZnhkSWltTDRZaElWVlhleUljQ0NPVC9ndk0yckdNR0pRdmxFTFREa1VVSWJWN3J0UjhGZ283MG1aYTV6NU9OWTg4M3NXN0dDUGIwZVltMWxaWXFWVzBkZHBnVU96SlFBa2JHMks4ZExVSitBTU9qeVpjRENYdlA4NndpeU0wcUR4c2ZqdjBCZEhRUU1RREpBSENvczl2cGJLSEovVkdpNGhMUFIwYkR6c3kwYnJ4MC92N0UzRXZhTjF6NVlVNmtpcTRRanZXdmdOclpjaENqc0h1UDFaaHNQbUxlQWExUDNQQkFjelJKeVhHeUVrSjVUeFZuSEtDNUhhZWdUMVJNUWNPeFh3S25rR0JZdmx6QUlvd24xNHRwMU1Mc0pqbUNpeWw2RExGVXVxTTBNUUtIMUJMQXdRVUFBQUlDQUJObXRwT0ZGaXBBUkVjQUFCSmFRQUFMd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOejFWd0pnQnhGdWY0cnU5bmVuVXhDV0VnZ2dBbEh3TTNtMkw2bk95U1I3R1lES3lHQmJCSmNFTENucDJjelpET3p6TXlHUkgzS3FZaUFJQ0lpeWlFSXFNaWhrQkFDSXFpbzRJbWllSXYzOWU1TGVlL3ArLy9xNnA2ZWEzY21HVjU0aE8ycXJ1TS92L3JycjU2ZWVlNnZqMzhPQUhUMnB4aTBNWmt1aXNUVVRxYkY0RmFtMDhXZ2kwbVhoTVNzVHZpS3hHeUpMWTlCbkowY1l5dllTb210a3RnYllqQ2JuU0t4MVRIb3BySS9Cb2V6VTJMUXhRWWt0a1ppZ3pFNGtxMk53UkhzMUU3NGxzUk9pOEV4Tkc0b0J2T3BmR01NanFYeTlCZ2NUK1c2R0N5azhvd1luTVRXZHNJTEVsc2ZnMFZzUTR5ZHljNGlPVGQyd3ZjbE5oeURaV3hUSi95b0UzNHFzYzB4VUduV0ZocHdkaWU4TExFM3hTREJUdW1FWDBoc0pBYkxxZmVjTHV3OWw0YThXV0xueldEbnN3dGk4QWIyRnFvNU0xaVN1WFJKU2N5VFdEb0dhOWxvREFiWjFpNnNaYWgySVEzY05nTm1zREVKbnFmbTdYVEowaVZIbE1hSndVVXpXSjRWSkZhTXdTYTBCSnRnT3lSMk1YSGRHWU96MmE0WWV5dDdHOVhlVG0xL1IxUGVJYkYzeHVCOE50cUZGODdxRXFwZFNwZkw2SEk1WGJKMHlVbnNpaGlNa29uYjJKVTArVjBTZTNjTXR0SGtiU3hEbDB2cGNobGRMcWRMVm1KWHhTRHZUM2tQWGE2bXkzdnBjZzFkcnUxazExSDVQcnBjVDVjYjZQSitpZDNZeVQ0Z3NadGljQWtibGRnSFkzQVpsVGZINEFxeXpUdlloenJaTFJMN2NBeXVZcmRLN0NNeHVKcjZQeHFEYTZpOExRYlhVWGw3REs1bm81M3NEb25kR1lNYmFlakhZbkFUZGQwVmc1dXB2RHNHdDFENWNRWkhibHg3MWhyUEhjdGt2ZFRnRGk5YjNPZ1Z4blBaZ3NjZ1BwVE5ldm1CTWFkUThBb01qanBySWxmME5ucXVsOWxSTlpiSTFPbnE2QjlhdjNyakNJUHVkUmM2TzV5K01TYzcyamRjekdleW95Y3ptRG1BbzRwT3RyakZHWnZBMFRQV2JsNC9jTUdwZzV1UUlQWUdkMmR0M3JCcGtNRWgvSDdONE1DNm9mV0RmTVJzM2pLOHVmK01vV0RRckVnVEgrTTNyTy9mdUdFdDNnOEhrM2dEbjROTmh3ZWMramVQREc1Y3ZXYk54c0ZoYkQ2VTlCb2NHQnphTXJqbWdzRXRnK3MzTVZpd0xwY2Y3YnZZUzJvWDlqbkpURi9LS1RyRlhlTmVvWTlyamtvZHhxbFd6aU5hUXZTd3JXTkZKcHNwcm1Ld3E2ZmFPaEUrNC9sY01lZm14dnJPcHR0b2o1dmZOVjdNOVEza3ZSUXl6emhqaFpOOVN0dWQ0dGErL3N6b1VMYm9qWHI1T3EyTHRqQm9IOGlsMFBTSHJFTVFySi9ZbnZUeW01emttRWNleTduTzJCWW5uNkY3MGRoZTNKcEJPQ3hlbDhuMWpZODV4WFF1djkzc1MzbmJjMzBGdDIramQ5R0VWeWl1emVVSkxrNHhnKzVGaXh6aTVyTEZ2T01XVjZkU2VhK0E4NmR6OFJGVzliVkVOTGdsdFJqTW4xeHRCcDJqVHVITWZNWkZLZWZXVnRjZnN5NnpQVk5rRUZ2amplYzkxeWw2S1Fiek5rNGduZTNlbGt3aGczcXV6bVlEOFVOaTNEZWxPVWlzMEVxdmxYcUxPL3RReXI0QlliTlRTYXZjamt4SytPc3d0N3FEd1VtTkVXRHc5djBWR3FsdXlqdlpBbEpFdTV6aFpKMzZ1S3FQdHU1aUZRMEd4MDNKaHNHT0ZzdmRzTDA3UnIwaUR5UTlQZWYyTDZyRjBzM2xQWVQrZGd5UUE4N1lHQW83TFlPWW1uWnVQd0l1UFpIbGpCa2NYemR5ckJWamNHYlhjR1kwNnhRbjhvamlheHRrdUNLcXpNVDRHRkljOVRCNEUwejdObEdEdG1JeVA1V1p0T2E0VmZpUEZvOVg1TnNBZ3p0YkpwcHhnS0tkMjE4OTBoYzNsdkozTnU2OFUxRGdZR2dWTGh0ejZ2UjgrcUloOUd0bnBsQ1k4RktyTVlhODh3Q3BycWc3WnJ0WDNKcExGZnJ5WWllTllwaHZ0ZU5GcnVTTXdrUVN3NWx3eThaSjVLazJVNE42dDAwa3h4amMwSExTQjY1OGw2ODhkL0NaUFMxWC9IMHRKdGtDaGJQSi9JWTA2b3ZiMGtrOURhcXhxcUdCZFpZaHh4am55aUdHZkEvQktOQS9zY3ZMaDV2NThtWVlsSzlUVEwzODhGcVdQaUxORFQwSFpLeEZQck9KWW1hc2IxMm1RR25aVElxMXFWSm11cWJ4RkdaaHZmeVdqT05SQTg5ZlVlenV3ZExkMlpuaTFuVzVVUWE5NVp0TnNORXNyQjU3Y3ZrR0tiUmhzUEtBaklHNDJVRmN5QkNZL2xhYnBpdVlqUnJNaVhTdnp1ZWRYV0xNM1BKc0VHMHBNc0lWRmZSV05LNHQrZi9jV3Z4V3RNSTNSSDNtY05GeHQ1M2hqSE5oSlhZUEhrWWxkaStEbTFxTHI1WUpmR1Mrb25mdFdPNWkzOURyR2hHWjgrc2JMRzVkbXhrcjhsMElCY3Q3SlAwT2IyZGZRQTA1ZGFUNUNBYmFmcEJsOFA0V1N0TXk2MTFjWDZnMVh0cVpHQ3YyaitYY2JXYzZlUWVGTEU4REd4bGUzNW94UE1ibS9lRU0rcG9raXptRmwwMkp5VThlSEIxYTVvTzVRWlpZR2RMWE5zR2gvdE1HNUhEZWdZYU1TYWlUQmpjZnZOZ3doV1JIWFZUVlg0b1BIemhJSzNJS21aOTY3ZU41Q2cxRWlsTDJvS3pRZEFKUjh6bGJpemJBMnJSSjlvTzd6OVdYaS9hNXN0NFNqZy9pemxKZjN2OGZVYm0rL08xak9RZlBybmNkckFlTlRUMHZ2T2NnUHFOcVN0Q1AvdDgvQVd4S3Zqc095a096cGtUc1NIbmpZN2xkREs2b3VjSmFhYm1HVHNzUHZ3YkVhR0xWODhYOTdzWmtQakNuTm1TOVIxNGJralJyd0t2MzMrbE54WmFHYkxqbk5TTk1zMmE4OW9DODMzcExQdjVha3FkWlk4WWMxL1VLaFlXeUxETzRvS2VKMlZOL3psRGo4ZGkwblRKZEZHUTh1TlAxeGprcGlkMVhFa1FoUVlJYmxXN3Vib2xVL3VlbWphZXA5T1JvVWJuN0puK2tObTJueW1CWmN3eEttbXBSdFhXNjZWeEJXUmIvNExhdGh6NGlpZzNuSnZLdWg2bW9SeDhsMXRCK0dkazd6ajdCUGhsbm4yTDNNMWpVc09IWVVjK2FzaVdic2k0YnFxWmJzbUtZNkFwRk5oSW1Zc09TMHlramFXQy9qSDJHanFYaS96bXlrcFExeFZaTVRWTVN0bXpRdkpTbUlDMmNyNmswVzdQcG10YlNYcU04Tk95Z1BzdnkrelREbEQxWmNYRzJsblJOMTBpNmlxTFFDSnlSS0d2VnNWWFRiYjgxcGVpS2Eyc1diMFcyZm1zNm9kbTJpNUx6VmlVdFdoM1pWUXhGODF2VkJITDJKVENOSlBYTGxxZWpEbW5lTDFzcGY1WmllSnFIeXZOV1JiZjhWczFOcC9XVTRmSldWVXY0clpabEpmU2txdnF0bG1va2pHUkpjNkthMUgwTGF5YjlyOHFXb2dnck9WcTVsY2dpZ1ErczBBY2t1WjRraWJtVjBRdVdiaW1HU3JSazhvbGZJbTNranhiMGFidWVrVWg3TkFlMU15UGpjWXlzb1p3cVVjRjJwZFJuS3dieU5SUmIwTFR4enRJNFpmUUoxZ0xKRlprOGhETmxtby9VNUpBRzhVNXJKSzBoKy85cy9rZGppYTVDMGdncUdyY3N6dGFJcXltMFFDb2E1NEVHOGkxUUxpRlJ0dldBdWlFSFZyRlJMNXQ0azlVVk0xM0g2dWpjQnExdUdGcVoxYzBhVnVkelE2c3JsbDNINm5wTkhqWGFJbk8wcWhWcFZyZlU5S3k1LzU1Tlc1TjRWdkhraGp5cnFzWitlOVlzZWJhdWQxWFRpM3JYTEhsWHhSVmFHWGtxYkd3cG1vSGpUV1RQY1lFNE5HeWtqeTJjRzkxVHFFTFpoUGU1NWRERGlrSFdKU3RhK09mamluU3ZMWlVWa2NxMm9sTFZrRWtWTXFsVk1pbGNBcFczS0NWclc3ekdkZWQ5cHM3dHl2OEw4YWltOUNoZkd1bjdnV3JCR004c0d5TVQ1OEFuUG00dERTT0xUalBLdUdqWWtPQTBNSTVHYWRnK3ZqZ21aTi9LNUQ5ZERwREVmV29MRFdqbndIN05WbjM5b2lzQS82R3NscTV4NnJaS01wRmQwQXQ0WnhzRzdTaVduWXJHQSs2MXlUQ2lHZW1wdlZHQkR5V3d1eGxLUFluZEVhbFQybDF6MUFPM3U2c2ZSTHM3S2JlRzNYVTVoVmRYdDhwWHo2UXJKNWpqQlRUVU5OMGJlcFJHWmV4RGVWU01JUFhwVnZzVmRlSXhOTlRXdHhMVmtJZUNOWjJva3BkdDFKNXFOTmRmaVg0T2tVaE5nUjNkNTBBU2xUZ0UvSFNpaTVLclBQNGlITW5QS2xtSDloUkR0MHpVaFVjQ3NjL0tNcysyVUNVZUhVZzZXU2Yva2c5UlFrSTQrdGN5Nkk2R29XOW9aOWNObFNJcGVnM25FQ2YwcGlxaXM2RXFQSGVoaUUxKzFOTW16NHNvQThLeGhrNkl3VkwxVndENVhzd3lmU3piZkNYSXNvOFhxcW0wRnlSUlI1Nlo4RjZ4WHZ6ZGtqQkxOR1RFcTZYNm51TDdCYWNXN0NqVjFrUjl6RnIyRkxiMHVYTTcycnFOSzVhUVNYVFNhWnlwY1lzcElUWWJ3WU0yT1I3UWQveVBhUGplVUpJQ0dZYmxUSUdNU2swNHIrQU90VkhJTWx3amhlK2RBVHBVN3I4QUhWcGRkTkNLMENMb01EZzZETm1mYjBUUWdXc0dkeVJmQTZVQ0haZ1VsNkhEcEF4N1NuVFFyQU5GaDRuaHRGbDBXTFZzU3JFZ1FJaXRxQ0pINGRZa2YvSzZuYkJ0bTF1QjBNTDNYcUVsSDZHTGxXOUcrUVk1RjBVOThuMGs3dFhDbHRaWXJLRVl6U05NZ0NUVG1XcC93dTIybHQ2bFZXRUkrUVZTekZSRi9oRkVWSmRiaHZCUUM2OWtGZTV6UHl1UktjSllDZUpvR1R3akp1UWsrRnpxOVROUFN4YlIzcWVHOUN6S2tNa2pWdEpLa055MFIxbE9hVS9STkxJdHRmampiTlBuaWRtalNVajF2WWljeUpLNmJlUHh6L0lqQTNwUnRoTktBdVZCdFBQWVNWSFE0RWczYkkya3BOM0hKcnNtVEI3Ui9XanBZNStqRUhjYVUvZnoyaUNmNHJ1TkZrUmxuczJMZkoxeTVYQ2ZKMXZ3ZkY5Vy9YT3k0V2RtcXA4L2N4cGk3WEpkVmNVTjF5MHZoY1d0RU0rMEVQd1ROMXBFWUZVcDRiYldPZDNmQjZ0UDczNjd3SmFnS2RkWVJWVllxaE5oL1ROTjJTbVRRZ2JYSDQvay9GN3pjNW9HOThUeVZlcnppZHE3SkRsZkJXcWdQWG1OdEtuTUN5THJJK0ZuQmo3ZS9MeUxzaDN1VVlOanJFWkdRU3ZXVmhKcDNkQmtMMkVpSGhLeW9xWVVCVVZFeERuSlJNTEFrNitoNlRoR1NiaHBUSjd4UktTcExxSTRwYWZjbEs0bDdZUnNSL0lSazRkbnpQWDhtbzZZbEtlSUcvcCt4ZzNMVFU0Wk4ycnVRWFhqaHBYVzl5TnVKR3JHRFl2SERkekRncnFQUnB5WGlNUUhNNHdQZGxWOHNNUDRZQWpPR3E1N2xXSUFjakZGZExBd09sQlVvQXplNUZFaWdkbVFJVTZoS0VsVlhDQ1B0VFl1MlBRa2FhcTRZSW4xVEpuRmxIRkJDN0kvb29jMjhlT0R4dlVKNG9OV0p6N29Zb1ZYeDRkSXRLbnlvazFlck1aaEtaTWx2OUxlYXB0VjFxQ2NVd2trdFFSaVpVWGM2Mmg1UDROUXJSU3RVNjRGM1pGRkhEOHErT2NzLzBtWGhjNUVMVlMrZnVqWmoycFp2QVZYTnoxd01aS09ZdG1hUmtFMjZhVTkzRUJNTGVFWWpxYnJIbG9PTnltVGduOWFkZ3hQOTF4Yk14TzJtbkF0Vy9HOFpEcUJlSEx4ejhPL2xQK0hmRlE2R1FXSUlOVGFISDJVYzlOZjJWTVR4OVltZVdyaUpKSU5QVFZ4WEhtL241b1k5WitaaExISHFEcXRJVzQ0WG1TN1JwYWorYzgvbmJUWmREYWlUQnBWa3NwVStZMGVZSy91S1FyeFJKR0ZJMHNUTVlNQ2hJdXJYVU9NQlhIZXNPZ29qenhOc2NhNUg0M3E5VjF2ejVvYy9iWDJMTTVUSUo3TG92Q3NuVkRyci9sRWdIQ2J4eU9LQ3BRNThWVVJSQ0RWejdFU2FWZFBvSmVTbm1VbVpCTnovSlRyeXFacXBwTzY1V0dRU1JwYTBrMjU2UlFldU0xa1NqYlRLVDJKdTVMdFdDbGttVXpoS3JGTGZ4elZZdmNveDdhL1k5VkV0eXVyazZBNzZUa05vZHRWMDYxLzJ1c29BdHRhUlRZdTg3T0dYMWNqZGIzRzV4ellZNHZUU3hBL0xUNGllczRTVDEvcGRLTFhPdCtVbnJud1V4ZnBqMmVxOEJUbE92eUpLT250NDRTZXNDQUhucmxTZjBvTkpQQ2xJL3dTanBXZ04rRS9KZUJqZ24yR3QrTmVTRHV4VVRxUFJVNVlPQ2FaRUJpbjhaNS9JcWE2cC9ydGR2RGtCdmNnbWt2UG9wQnZ3Q0Y0V3E3NHV3VDN1ZXRaaHBuMkhOVTBURFhoNEQ4VnozOG9ucTJuOWJRbXF3azVvYVJTRGg0OGROdlJ2WFRLVXpCbFNCcWVuVXBqQXAvRVNaaG9tV21GTXRTMGl2SFlSQkptMHRRVG1wazJYVlBUTlRJeHVralcxRGc4eUQ1Tmx3Zm84aUJkSG1KdzdGUWZWakk0cHQ0UWVndWR3YUo2M2FWdkd2WHZLbm9GeFNTV0QwdnNNM0gyV2ZZSWc2UExKeEsxamJqdjVMMHNmWWR3U2VOdlhpa2FVWDYwdVRsNmM4TU5Zckdid2ZGVGY5TGNIR0Z1bFQxMGVheTVpWW5taGx2TkRiZWJHcTdLelExWG1odXVOb1N5elpsc0VWY2ptWEt2eEI2UHMzM3NpVGg3a24ydXpHdmxzemNYMDViL1loWk5lNm81c1RRR2g5ZDZIeUhPUHMrZWJvNVVjMmhVRFFheks5OHNpOE9uNEg3NmpQc1pCb2ZWZUtkVll2ZkUyUmZZRjBuUkw4WFpzK3pMRXJzM3pyN0N2aHBuejdIbkdmUTArcGsrZy80RGYxbWR4RmdhWjE5alg0K3piN0JGY2ZaTjh0YTMyTGZqN0FYMmZCeWVBN3k4Q0UvRTRRZHdaNXg5aDMwM0RudmdNWW05R0dmZmcxZWFzNWNwc2UvSDJVdnNCd3lVcGw5dWpiTWZzaCtSdUQrVzJFL2k3S2ZzWjNIMmMvWnlIUDRDcjhUaDAzQS9neld0ZU5rNXpuNUJKdmdscWd2ZlJlM1pyK0Q1NXRSTXhKbEVNajFBTWpYbm96by9ROUFNZHl2T1poSDNCK0VodWhEUTRHbTZmSmtCeE5tdjJXL284bHU2L0k0dXYyZnd1a2xmU21Fd0k0SWVCb3ViaUY5TmpWYWJHczEzbXo4d21Gbm15cVpJNkVUaWowMU5NWm9hYlRZMU90SFVhTXYzUzRDWXB1WTJ0NjBvelcwclNuUGJpb0p1bjFNejVqR1lWZjZDRm9QdVVzTlFrVGFjWEQ0SXM4aHhhRVA0MGhhQzJ0dkpxWEFNaDYrWWw0TG5ycDZEOXk3V2ZHK241MDc0ZWNvWkUyUEZ6UGlZeDhkczlJb1RlUlJlcnkvY1pLK3Z2YmZXbTg0SDdUYzFybngxcFduNHR3dXVhNTBjcmZuNWg2dGVkWUVhdHMxMCtnbURMVUVlVTBwVkNndzY2RWRDYU5HZDJITnVSTG9OeVFzOXQrWjNpNWMxOHlJa01UWHEycUZFdHZLZTVwM1o0dmRBa2VUeFBSRkdiaTdyVHVUeEJGVHNveFhLdjl4SWcrYjExUGZwbk5MMGdkelltT2VLMzAzcDhyYVBGM2VKNk5WVHcyckhpRmhRT3JsRUhNcmd0SVlpUVVNdkFzK3BZVzZ1ZTVVRXc5aFZFWkZHR3BBalFwNy9aRktqZ21WYkY0b2IreFo4ZXlIelZvKy90enFFTnoxRFpJWE9UTGloekMzelU3RFI0RHhwcTFOWWovc0tuM29PVHMzeW04T0Q4ZEVGNHY5bUN0OXE1RWwrR3FET2U3ZHRZelR4TUtTd1BwY2R5cWJRUmFuZzYvVnQyRXJlSEtySmxYNmZSUHlRVkp1VFNsVzRQVmk5S1B5UjllSUw3cnNlMzZsSzMwYWJVL043V2NoaHV6Tk9QMzFRL3IydDROZGV5aUJhN3p2RDNTanZRT1V2STVWYk5QeWxyTUtyL1AyejJ1dmpxSEp3Y2tnT1p0MGMvOG1oRG8vWEdHaFRnYmltUnJQUVJmNXEyNVFiejdoNGhxbTFTQnYrS21ENHhmVFphTlVLMkhRV0pzYkh4eklrdE1TL1FVcy80ekxiLytKUjlMSEozcDZxZGZ6cTd0R05iSVlOUnBJbjlsUDJBOWxHV3lqK1V5MDBmUk01U1FzMWVLYTFEamc0U3B6WVFGN0NmelN1NTV4RlcrQTRhSU5iQWMvV2NCVGNBWGNDZzQvaDNUUm9oM2x3VitRK2h2ZDNSKzZQeHZ1UFIrNTc4UDZleVAxU3ZMODNjaS9qL1gyUmV3WHZQeEc1Ti9IK2s1RjdHKzgvQmZkamZSNDlIdUhsQTd3OEFXVjdFQjVDdVIvR3V5eEkwSUhsck43dTlzVkxsczVybnpkOUQweC9tTlA0REY1aldBS2NEak5oSFh3V2E2djgwZkFJUEFyQWE3czVWNnJ0Z2NmNDZGbXdGeDVIK2xUYkIwOGdQNm85aWJYcDhEays2eW44NjhCWm44ZVNwSGthNjhRemlhM1R5WnFCTkh1Z28xS1dEVEFEenVTeTZQN1lVSlo0S0VzOGxDVWV5aEtIWitBTHlJMzRmWEV5N2FWS2pwdFErODFOYVA4bGVMWXA3YjljWC92T1NsbmVoTnFQTktGOUlFdWdQWU92d0ZleGoramVqalNwYi9NKzZCcnBqclUvQ1RORzJ2WkJmR1R4SHBnNS9Cak02bmdTRHFHVzJTTzllK0RRNFpIMmZkQk4xY09HUjZidmc4T3BPb2ZHN1lHNVoreURJMGIyd1pFanZVdjJ3THc5Y05SRG9lRGQzQVJ2aGpsd0hxeUU4MkVOWE1BVk9OWm5IaXF3bVo0M29vQnI0RkQ0R253ZFozK0QwL2dtdG4wckZQcFJJZlEyTHZUUjFVSjNDcUdQSWZGZXg0V2VUOVVGWE9oanFYcmM4RWpIUGppZXFpY01qMGo3WUNGVlR5eFg1U1N1eXV0cnFMSWRWY25DTU9UZ0hCaVBxTEl0VkdXYlVPV2NDbFcralcwdndIZUVLcmRDRi9maFNxNUtUMGU1S2lSNGZHUUpyNkxnaTBhVzdvRmVFdkV4d1A2NXk5dDc1N1h2aGlXVndsMENpK0V5V0FaWFlraDRWd1FvSzBQaFZncmhxUFpkckUzanRSY1JvRzA0UitJQ3R3dUJ2NGZqdmc4dkNZRWZSb0ZwQVF4eGdaZEtqUWhNbGw0MlFsanVpd2cvdlhmZTlCckNYdzBKdUFhV3cvWFFEemRFVnR4UUtQeFFLUHhRS1B5UUVKNXFQOEExMEk2emZUV21DelYraUROK0JEK3VhWGU1aHQwWGtScTlYSTFscEViZjFIYS9DZTErTTlyOXcyakRXNmUwT3duczI1MEVycmI3VDNEY1QrRm5RdUJ0WXZFdjVnSXJiU2d3eXRNdWdLNFNlRFVCM25XOWk3djEzV0JVaWtkci9RNDRCcG1kZ0RzRWlUZlhKeW5FT3dFNnVRQk1DUEJ6ckwxY1J3Q3pRb0FFQ1dCTkljQTlTT0plRk9BK1pQV0pCZ1g0UlIwQjdBb0JscE1BSjBjRVdGRkRnRThqaVFkUWdBZVIxVU1OQ1BCTHJQMEtmdTBMd0M1QUowbllmbC92WjJEbDR0MndDcVBFRzBhVzdJVlRHRWJiMWV1eDFvOW5vZlo1N1h0aGdNRXRjQW5WMWxDUUgxeU9NRm83c2dkT1hkNHhyNE53Zjlxak1PVFgzdGkyRjA2ZmhvTm03SVYxTlBnTS9QOVJXQzk2Mnl0NjlVZGhnK2lhWHRHMTRsRTRjK204anQxdzF0bjMvdTN0U3gvaWV3dHB2d3gzREVBZHUxRExJM0NQTUZEZVZiZy9uSVk3WXhyM3hrdHhsL29Jd3ZFdTNLUHV3UjBxV0hXcndJUGZ3Ryt4Wm1DMCt4MzhnY1A1dmhETzk4RWY0VTlvb3k3RTF0L0RQNkNkanNBMSs0L3dUMmlwZnhiVzlmditKZXo3Vit6N04rdzdGS2I5RlJaSThPOFMvSWNFLy9rS1JpcmY2SDlHZ24rQlY0VFgzNGdxa0l2bTlqNENHeGZ2aGVGcEtPc21jdmJtM2JDbDVPQU92cXFlaVRoMWJpam1YUGd2K08vUXFmL0Q2ZjlWME0raFNnU05CZnZnN0pIRlMzcDN3NXYyd01qNnBlaml4K0NjM1hEdTJiMUxkOE9iUzR4bThTanpiU3hmd0h6cU81eGhyMDhpWkxnQS9vYlNrRUFMR0dNMGN4YnFTMEswK1VLd2FjQllXNGlzT3dTeVhrWmtuZGNJc3ZhV0krdDhSTllGRVdTOXhhODVsY2hDZ0NRbkJaMWJCM1IrYjZvTzdoQ1NudWpxcU9hWURpRTVFSUdraVFrVjRMN1NoVHZMRVJnQkRRelFxekJBbjRZaDJzWFlkeW5HdnR0eDdUK09VZUJGREVNLzVwSGdseEZvM2dhL1llMGNtdmVHMEh3NWRNSExJVFJmQ3FINVhCVTBYd3FoaVgxc2VqMW9QaVc4aGlDalQvWW1nK1lvUVhOckRXaitkbXBvc2s1T2YycG9uaGVCWnFZU21uL0c4aThJelZmMkU1cGRLRVFzaE9hbEFwclBJalF2YkFTYXQ1VkRjeHRDY3l3Q3plMzFvWm1kRkpxNVNhRTVYaCthRjRYNE96K0NQeFhUWVVCVGQ4SGY0QWkwZzRIR1dJWEw4alJjbGk3aTZsSkV3KzNvOE1mUklVK2pZNzZJZGlsaDczTEUzZ3lPdld0QzdEMGIydmpaRUh0UGh0aDdzQXA3VDRiWXd6NFdyNGU5dTRWYlpxSmJaazJPdlR4aHIxQ05QWnc3TmZZTzRmU254dDZGRWV3Vks3REhYZ2V6Mkh5WXh4YnNKL1ptUXhjN2xIV0xvOWxiRUhsazJWbjdvRzJrVnh5SEppcVZXeGpKdFB6REdFQndHUE9QWlhUODg0OWwrMFNTNkIvRzJtc2N4b2ovWVpQeDMxSEpmOUdVL09rQTFnei93OFZoY0JPMmtnWGpBZjg5Y0hFbDk2VVJTOGREN3ZHUWV6elUzai8rdFhFT2MrcHoyRm5KUVptU1E2QmZpY05jZG9RQTB1bEloVFNlMmQyRzlMdmJ1M2M5Qm0rdFpHRkVUbEF6T1dIZ05SS2Q4Um9SRmljb2RpUm5NRzhTQm0rclpHRFhZVUNTVnpNNGlqTTRHalVtQmxzUUJmd0F6eGtzOVRtOHZaTERxb2lWWm9VY1pvVXErTDZmRnZxK1RmamU1M2hNQlFibTRrcWFoUHZmVlhJZnFNTTkwRzl5N3ZPajNHZDNzZ1hzV0dIYzVWalNySTVlRFAzVEtyZTAza2hZNldESGlWWGV3WTZuRkpxZEFCUnJHVnVJRkU5c09jV1QyT3NGaGdkUkcvS3JoUGJaRGF3MlNkLzFVa2hTUXBMMzgzNko5ZUFTbm9Za2UxdFBjbkdMU1VJblc0SkwzaWY1Szl4RTZMOUg5c0U3UnJyZkdUeXB1UVIzM0V2NUVmWXlyRjNPVDdCWFlPMUsvM0QwcnMvU29SY252RHQ0U25MVkNJYTE5L0FaVitPNDkvSVoxMkR0V241eXZ3NXI3K09QU0s3SDJnMGhsZk00bGZkTGdzcU5ST1VEbk1wTk9PNkRuTXJOV1BzUXAzSUwxajRjenIyUTVHZGMvL2s4dlZnSlBiaXRLckFhenhuOWNER2E2NU93Rm0weWlQQmN4a0hhQngvRktkUFFSdHZRU2g5QjNjL0g4allzMTJKNU81WjU4UDhiRmVVbVVTNFhaVUtVcWloUEV1VkNVUjR2eW1ORk9WK1V4NGp5U0ZFZUxzcHVVYzRXNVMzODJnazNpL0ltVWQ0b3l1dEZlWjBvcnhIbDFhSzhTcFJYaVBJeVVWNGl5a0c0Rlg0UFhmOExVRXNEQkJRQUFBZ0lBRTJhMms3S01QTytCZ1FBQU1BSkFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNall1WTJ4aGMzT3RWdnR6RTFVVS9tNmFkRW02UUtFdFVrVHdVU0ZOSDdjQzFrZHJ0WStOUnJmQlBpd2lJbTUyTCtsMnRudmo3azBwLzQ4ei9vcU9CWkVaaG5IR0YvNVBqdWR1WWlOdEdKcVJKSHNmNTl6N25mT2RlKzdaUFA3NzU0Y0FMc0hMb2grVE9RemdyU3hOMzg1Ujg0NkJkM1BJYUVrR1V6bWN4M1FQM3NPTWdmZDdrTU1IQm1hMVpzN0F2TzRYREZpNkx4cjRNRWRvSHhrb0dmall3Q2NNM1dyZGo0Y21HRVpzWC9KYTRLaWJNdHFjNUo3WWxEeDIrYkw0cGk1aVZaVFJVbDBxUi9reWpLZG8yN1FmK21xR1lUemZ3YjdoTlliMHZQUUV3MUhiRDBXNXZsa1IwYXBUQ1VoeTNKYXVFNnc1a2EvblRXRmF1OGRnbHNKUVJQT0JFOGVDcHVNSHR6bDBZWkxjelRpMVduQ2I0ZVJ5Y1dsWnVNTGZFcDYxSlVLMUxPSWFyU0pMS20vTHFNcHZpY3JGRFY2THBKS3VETGdySThFM2hWcVhYc3lqNW1KdXkrclVjQWMrUE0wcWVkWVZ5S29tMUpGdGhoNmhjZGFjZ0l3WldLVG9XUzNCRlYrdDJ4cTI4QjlZdGMzblphZ2l4MVZEKzljUzVHRjF1eWE4VmtBV25nL0JjM2w3dzlseWVPQ0VWWDY1c2lGY1JiSGJKMkxJV2R1dXFDVjRCc29NMlJXL0dqcXFIcEV2MyszZm9MMkxCTEVobzl2OFpqMTBrNjI4MkJ4TmR4YlM1MEYyUnJOWWtmWElGVVZmWis5Z3UvM2ptZ3BkQUN0MEF4bjdZWFV4OGNmQVpST2ZZc25FQ3pocFloRExKbGF3YXVJejBLMlorLy91bVJqQzZ5YXU0SE1EVjAxOGdXc01wMXN4Y2lvKzl4d0NvU3lJK1NxMUpyN0VkWWJVdFRrVFgyR1dvVDg1aEUxSHJmTTV2MW9LbGFpS3lNUU5mTTNRMnpxZ0ZSVVJLeE1PS2d5am5aeUNpVmZ3R3UzcDVIWS9ZYnFSR3d4bm41RWNCbHlHL0VFdkIwTmZ5OFJ1bGpJTUg5aFBxanpSbm1NcEJ2SldvOGJaQjZrOENTYTMxRHBsbGhKUm8veTBLUDZMcGl0S1hwZlpZem9OckhtcnRHWXQzTERXclBJcVJjVisybkVuSHVuc2RWeFh4QlRXQ1hvamZOdEphWDhHZEtlMXRZTzYxVmNWcWl6RFV1aUpiZUUxdEZRUDg4MGlVMWQrd0cwLzF2U09QQ21oV05GZWhvRjhxVzFGT2tUYUJJOVNQOTkyUmNyM2FKa2Z4M1hoelJMU0NidmRGZEdIVXE4RStoVzM5NWFRYXFBdFY3eE1MK29CRUNSWWI2K3VDZlJ2b0l1ZVFad2k2WXMwbWtHS3ZrQ3VNTElEVnJpSDFQYzBTK0UwdGQyMEJ2Z0ZMMUY3b3JFS1p3Z1R5VWlqTWZyU2JXdGkvVW5ZYWVyOXdvOWdQNkJyNUNla0Z4OGdjL1VldXN0amhHK01qZDdGb2E3N3lLYndDTG43NkdIVW0vVGJ3ZUZFbDk2ak83S0RvNGtpczBmUnU0TmpZM2QyWFQwRGc5cGZZZUkzb3Z3N0Vmd0RiNUpEWlR4R0ZYOGxGQW9ONTNZcCtMcVdrZXNtcnVNY2hnbXBuK3BrQVNQbzZwMGxXcU1rMGJRdU5rT1VMWXc4d3ZHNzZMdlROa0ptTXM0MjRjZm9TWk5rbkZxZXJKL0FHMGwvZ1FDMTdoSTVlSlpHcHlocS9XaDhNaVI5bFRET3cwWWUyWDhBVUVzREJCUUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rVVhWdmRHVlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT3RVc3R1RXpFVVBVNmFUaG9DTFFVS0xRK3BFZ3ZLb2w2QTJJQXEwVUtrU0NNZUtlcUdsV2ZtZHVMSVkwOXNUL2d1VmtoZDlBUDRLRlI3T2hJYmtGaXd1ZWNlMy9lOS92bnI0aExBU3p3Wm9ZL2RCQThUUEdMb0sxTXlIS2JHbHZ3YlpTOFd2TGJHbTl3b25odEx2Q0kvTjRYamxseHR0Q09lbXZJMXc5QTFkYTBrV1lidGRDRldnaXVoUzM3cXJkVFJQckRueTJuQjBQdDZ6SkFzRytNcDBxRjBycUhpcldmWXVRNnJoSi96WTFsT3RhZVNiQWp0TjVsaVdIOGp0ZlJIZ1Q0N09HTllPekVGTVd5bVV0T0hwc3JJZmhHWm9samQ1RUtkQ1Nzajd4N1gvRnc2aHIzUHNlNk1jcElyS3Q2dlNQdFpOd2JEZUtvMTJSTWxuS1BnTzBtbDRiVVMvdHpZNmhVdnFETGM1WHhHeTRhY254Z2Jjd2t2US9EVHY2Y043WTlPVFdOem1zall5TzZmNGcvajRHUGN3bWFDeHd6di9rZGhocTNmVi9pWUxTZ1BLejc0NTh6WVJ5LzhDbUFkWVhzWUJDMmNBRW1MUTJ5ME9PcndCc1l0M3V6c0xJNFM1Rlpndk9YQTRQa1BzTzlCNmVGMmx4YnNFN2FEUHI1MndCM3N0UGI3clh5QWV3Rkh3ZGJESHU1aTR3cFFTd01FRkFBQUNBZ0FUWnJhVG5JdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUJObXRwTzV3TGUyRVlCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFV1WTJ4aGMzT1ZVVXRQQWpFUW52SUdVUlFmaWZIcVFUUmFqY29Gd2dFaWlXWTFFUWozc2p0Q3lkSmkyOVh3c3p5WmVQQUgrS09NczZzblk0eE9NcSt2MDYvZnBHL3ZMNjhBY0FaYkpVaEROUS9yZWRoZ2tHdEtKVjJMUVhxdk5tU1E2ZWdBR1ZROHFmQW1tbzNRRE1Rb0pLVHFhVitFUTJGazNIK0JHVGVSbGtINVVpazBuVkJZaTlRZWVsTHplU2pjblRhek9nOXdwcm4xZVEvdkk3U3VxODF0cEoxd1VpdTdlOTVnVU96THNSSXVNc1I0NVdrejVvODRPcDF5TVpKOHNKaGpEKy9Rb1BLeCtlMHdFRVJEQTVhUGtRUUlod0Z2THh6YWszcWpSY1Nsdm82TWoxMFphOTMrNmYyanFYZ1F0TzZGOGtOdHBScGZvNXZvSUErYlpjaEFsc0hCUDFaaHNQT0xlQWExUDNQQk1hVG9rMkpqNUtTRWNvNHFUamxHc3Z2UHdKNm9TRUdlWWk0QjIxQ2dXUDRjZ0NJc0pWZkx5ZFF5ckNTNUFxc0p1a2F4bERnak5MYkNCMUJMQXdRVUFBQUlDQUJObXRwTzRqYzdQa2NCQUFBakFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpsVkZMUzBKQkZEN2o2NnBabGowZzJyYklDQ2NwM0NndWtvVENnbFRjai9jZWRlUTZZek56QzM5V3E2QkZQNkFmRloxN2F4VVJkZUM4dm5QbTR6dk0yL3ZMS3dDY3cxNFIwbER4WU51REhRYTVsbFRTdFJta2o2b2pCcG1PRHBCQnVTY1Yza2FMTVpxaEdJZUVWSHJhRitGSUdCbjNYMkRHemFSbFVMcFNDazBuRk5ZaXRiV2UxSHdaQ2pmUlp0SGdBUzQwdHo3djQzMkUxblcxdVl1MEUwNXFaUS9yOVNhRHdrQk9sWENSSWNycm5qWlQvb2pqc3prWFk4bUhxeVgyY1lJR2xZK3RiOE5BRUE4dFdENUZVaUFjQnZ4aTVkRFdHODAyRVJjSE9qSStkbVVzZHY4bkFiVzVlQkIwNzZYeVEyMmxtdDZnbStuQWc5MFNaQ0RMNE9RL3R6QTQrRVU5ZytxZnllQVVVdlJOc1RGeWtrSTVSeFduSENQWjQyZGdUMVNrd0tPWVM4QXU1Q21XUGhlZ0FHdkowMUt5dFE0YlNTN0Rab0p1VVN3bXpnaU5MZjhCVUVzREJCUUFBQWdJQUUyYTJrNHZqTHpnVVFFQUFCb0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNReExtTnNZWE56alZITFRrSXhFRDFGQkVFVW4yaml6aGlqTHFqdmhSbzJSQk1OdWhCMTRhN2NPMXhLTGkzcExUNCt5NVdKQ3ovQWp6SU9WemU2VUp0TXp6eE96OHlrYis4dnJ3QjJzVmpFQ09ieW1NK2pJcEE3MGtiN21rQjI3WGI5aHFGdVF4SW9ON1NoaTBHdlJlNUt0V0xPekRSc29PSWI1ZlF3L2twbWZVY25BcVZUWThqVlk1VWt4T0ZxUTF2Wmo1VnZXOWZibHlIMXJFd0MyZFM5Zmt4TmI1MkthR1hyVUNEenNDa2diZ1VLVFIwWjVRZU9OYzhhMWtYeW5sbzdYYWxhV2w0OTl1bVMydVRJQkhUMG94Z3FyendURWhrUmo2QThoZkphRzcrOXQzOVk0dzdGcGgyNGdFNTB1c0szQ2FwZGRhZDQwMk1UeERiUkpqb24zN0ZoSGdzbFpERXFzUEtmTFFTV2ZobFhZUGx2RVd3aXcxOHlQSUtOZXpQbTJEdmdmSVl4dDdIMERQSEVYZ2I1WVp6eXFoamp1L0xKUUFIanFVSU9KVXh3UFl2SmxGL0dWSXJUbUVtMVova3VwaWJTbDhEWUIxQkxBd1FVQUFBSUNBQk5tdHBPb1djZnMwWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWlZWUxoSU5FRXMxcUloRHVaWGVBa3FYRnRxdmhaM2t5OGVBUDhFY1paMWRQeGhpZFpGNWZwMSsvU2QvZVgxNEI0QngyU3BDR2FoNDI4N0RGSU5lU1NybzJnL1JCYmNnZzA5RUJNcWg0VXVGdE5CK2hHWWhSU0VqVjA3NEloOExJdVA4Q00yNHFMWVB5bFZKb09xR3dGcWs5OXFUbWkxQzRzVGJ6Qmc5d3JybjFlUS92STdTdXE4MWRwSjF3VWl1N1gyOHlLUGJsUkFrWEdXSzg5clNaOEVjY25jMjRHRWsrV0M2d2gyTTBxSHhzZlRzTUJOSFFnT1VUSkFIQ1ljQXZsZzV0dmRGc0UzR3ByeVBqWTFmR1duZC9ldjlrSmg0RXJYdXAvRkJicVNZMzZLWTZ5TU4yR1RLUVpYRDBqMVVZN1AwaW5rSHR6MXh3Q2luNnBOZ1lPU21obktPS1U0NlI3T0V6c0NjcVVwQ25tRXZBTmhRb2xqOEhvQWdyeWRWeU1yVUthMG11d0hxQ2JsQXNKYzRJamEzd0FWQkxBd1FVQUFBSUNBQk5tdHBPaWRnQ3VDUU9BQUNOTXdBQUtBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNQTldnbEFITmQ1L2g0c0RLeEdXRUlTRXJKc2JBbkpIRUk3dTdNWE1sYURBUjBKd2k1Z3FUaHQ3V0gyTGF5MTdKTGRBVW1PMnpSdG5UcE83SnhOWStkdzJyVE4zVHFIUVFwMjRpWnQycVQzZmQvM2ZhZXQwenI5LzVuWmcyVlhHZ1Myak1TYmQvNy85My92Zi85Nzg0YXZ2Zmo1THdBSWkzNC82dkMwZ2s4MzRUTituTVJuT2ZrY0o4OXdzcVJndVFscEJaZjh1SXpQSzFoUjhLd2ZXL0djSDAzNGdvSXY4dmpubTVCVDhGTis3TUNYL1BneWZwb3JmNllKaXdxKzRzY2VQTmRNNVovbHlwOVQ4TlV0K0JwKzNvOTkrQVhPL2VJVy9CSittWk5mVWZDckNuN05qd1A0ZFQvMjR6ZWFLZmViblBzdDd2amJXK0RINzNEZDczTHlleXpoOTFud0gyekJIK0tQRlB5eEh3SEc5U2Y0VXdWL3h0ciszSThRL3NLUHY4UmZjZTZ2dWU1dk9QbGJUdjZPazcvbjVCLzgrRWY4RStmK21aTi80ZVJmT2ZrM0JmL2VoUDlROEo5K0RPSHJDdjdManhGODNZOUIvTGVDL3hHNGVjTEs1bVJpMkxDTW9Wa2pNeU1USTRzeVk0M0wvSHcyazVjQzZxbE1SdWFHMGtZK0wvTUNqWGVlR2hzY254Sm9IWDNBV0RRQ2FSb1RtTEJ5cWN6TTdRSmJoMmlRWldTc00wWjZnUWJmY1B5ZXNhSDdKaWJ2R2g4WkhoNmNIQlJvY21wR0pndlpFNXpkWGVveWRISnc3TVRJOEgwalowYkdxS1ZqTkp1YkNaeVgwL29EQVdNNkZVZ1FVT3Zpdk13SGJKeWtzM0VnbFVsWnh3UXVkcTJGVkRaNlBwZTFzbVkySFRqTHhmSVdNM2R4M3NvR2hvZ0hFcGt5MHZuYkhVbHpoalVidURNMWN5cGp5Um1acTFIYmZVYkFONVJOc0wyanFZd2NXNWlibHJsSll6b3RtYWFzYWFUUEdMa1VsOTFLbnpXYklpNDdSMVBad0h6YXNKTFozRncwa0pCejJVRGVERXlrNXViVGt1ZkZtSkZrNEExbU5tUGxETk1hVENSeU1rOERHMnpjQW50cm15ZXd4U3paUS9OOFpYdHBObWFNL04yNWxFbncycXJiNmZRWlRjMmxMQUgvc0p6UFNkT3daRUtnZlh5QjVNekpNNmw4aWd3Y3pHU3lORXNwOG9XaU1IdFNTbU5JV0g0enA2dlVhbDBJRU1yQWtNdlpDYllxdTVoS3VCTzF3MXpiSUhESW13Q0JoNjRWTkVtZHpCbVpQRWtrWGs0YkdhTzJROVYyczFacmpReUJXNitxUm1CeGszRjc1dHVmTDhZWG9ybXJ1NXBTazNvRXhzbjdMVGxrcE5Qc2FNbUZqSzFRWUgvTkFIRGM3VVA5bXlkU014bkRXc2lSOXg3enBHU2dPc25IU0ZoOVhwS0REM1RWbUFhUEZtVGtlVGNJdm40RGtnWnE5cG1UMW13MmtRL2szRWhkUGszajBwU3BlY3V4Wm9hdDJVdHA5VWhQUy9TdXJnMXA2WGJNVzdCUzZjQm9Lczh4ZVN2UFVLSzBpUXg1aUhTZFY5NkpPS0pKcnJCWkpkU3RJNlhTMlpRMU81cWRFZWhaN1prRnIreGMyL2YyMWF2Sk5VYmdqZzF4UWE2NHlGcVlCNEZ0YTVscExvd21DM2FWTlEvbWNzWkZ0MC9iNmoyRHFIVDNqWUVLZVFQZXJXVlh1TGVhdm9GTm1Cb1d2blhDTXN4enA0MTVHNnVDRitpZ3BPQWJBdS9lWE8vYUxMdzM1NnYyT1o3T25uZklIdldDKzNWRXNSVVlzV2FQcDlLV3ZhWUpYVTZ5Q1l2eVFxQWdqWThwU2J1SGdINE5ZZ1hlc1lsb05vdkM4N1V4RGN1a3NaQzI3a3huelhOM0d6bURNSzdlTnJ4MHIwMG03U3BHenVrdUVGaW5XQXJPTXBOd0J6OTdmV3pZckNud3BiTUdIY0RlZjcyT3Z0NU9zRTlkeDFPVE40VHZlZmtQbzk2QVBYRmREbTdlc0RVbTVIdzZlMUhneWFxTGFQTzQydEJKVE9YWHd4VHZwL1pwckZWbVRIcFhTOWh2cXJrRms2d1JlUDRWYTRDWFFHRkhnZzk0TTJFamJyR2hhZmp5S3htZlo1WS9kTzJPc282Z3RTR2l2L0lLaCtpWjZ3OXZ5R05lTHJxLytzcEg2Wmx4djJHYU1wL3YxRFRORGlnZWhsM2xlczc3MFo5ZlVycFhFM2JsdDdlNkN4b25RVTVDQWtmV3A0b09nUU5tMnIwNXJPK3lyeW9tc2dzNVU5TFptYmVKVldZZVllNVYvQy8rVDJELzFWa1JkYm1vRnRlaVdsaUxoUFJ3WEF0R29rRk5DMnFSV0pTNGpXdkpSR1E2NHJRSHFTV285K3R4amY0NytiaE92OEU0NVIwSlVTMmt4WU5CVjRxdXI1WkNFcWdVaVVTMXBDTkJDMGU1UnUvbk5La241Um9zVkYySlJBdnJORFNxNmFiVG9sTXZxUVZOR3FtSGpLQ1JOQlA5d1RCSkNVWmlYRWZhWkRnMkhlUzZTTDlibHdpYk1xcWJYQmVMUkdLUjZaSU9Ha2x5WTlPUnFKMm4ya2l3UHhnUFJVTDBKT3Y2U1NYYnFWRXVxWE9mbU02bzRseXRsekdnUlJPcnNUUFNlSkRsRWd1dW51bTRvNGRxd2s2Yk00SktJZElaY1pqdjF3aUI3dnpHa29hTWhhTjZUQXNGcGE0WlJHRTRGT3ZYdzFvd0dJOGtRMlk0bkRDVDlFNGFqWnV4WUxBL0hqZU51R2JFa3JvWkN5VkRzUmpKTW5TYURhMmt1Wi95U1dtRW9wRm9LR2JRdjVDdVJlSWhMUnBOUnJWRVdBOGEwMGFNeFBTSFpGeFBSSU94ZUV4cWlYNk5LWlQ5WmpRU1pPT2lab2dLWkhNd0tDVmgwV1UwVE53a28yWlVEK3VzU0RPSXZKQ0tDYnpJeVRjcG9XTVBKVUxnbHF2ZG5nbnNxOVdGYng0VVVhZUtldUVUdUhGMU4yNGNsMG1aby9NVXJaZE9EKzh6T21OcTRLUlJZR2UxY0tZS1JUUUpkTmRDTkNNek1zZjN4NEY3VWhrckZJbXlzR1pGK0ZXeFJhaXEyQ3BhdkVFSnEvaFdqTk9LRmpjSTdLaHlMYUxnQlZWc0U5dFpRYXNxZG9pZENyNmhpbDJpVFJXN3hSNkJMcStoU21Cd3crOTZQSzJmVWtXNzJLdUtHL0VKVmV3amE3RW9ibExGeldLUEtqcHd2d3FMRW5HTHVGWEZhL0h0aXRpdmlnTjR6QnNkRVVWMHF1S2dPQ1FRWFBjMWd5cHVFMTNNVTdjaWVsVFJLdzZyb2s4Y1VmRldQTWJBSnptWjVjUzI0NXdpQXFyUVJGQVZJYUZ6RXVZa3drbFU0S1lyYmlnQzI5Y3c1YzNFSUNPTWVldkxhMG5FQlhaVm5XT0JsdFZYVXJSYmxDcE9XZXloL0ZKeGs3eGc5N2VCRjI4RVNtNXhzZXY2Ylo1dnFmWmFlZDIrbmozODBxTHgvTEhpOGMzRHNUbmZleDU1eVFGNTVtWmJSWkRrYjhIOE5aRGQvMkRYYTh0UTNUWDlnRFNyZmhhNHpkT1JrclZGYWhwZWtsZFo1bkg3NVFWcExsaXlkUGlkb0tGcGFmdi91TFFXY3JUaFRkVmVlTVZ2U21YcTdXL2ZYbDhIMm10OTdDRnd1MHFBaDdMcHREVGRUNlROY203ZXV1aEdrcTRxdk8xYlkxWFpWQXFjOUdDUFIvaVp6WXRKM3I0VStmS3BCNlY5QWo5RmhhNVR6Rk5UcWhoRDIxYlJVWWl0TkU2Wk5mSmpGR0R0b2ZmUzBJeGQyRm5vWCs2SjVLa3owckpqcm5hRmo0TTEzaFBxMHp4d0cwazRsVW5RUkNRS0g2QjJFZHBxeXBxb3EzdloxSlJOSjl4c3ZaRkk4SmdxQzRYZzc2bTFoR216a1hiUUxuMlkyRlgxUnBrMHpCbnpBa2U3VnQ4NEY3NmtydktGV3ZmcXJRUjlxUEt2RFZaeld2eGJqL3hMZkhPK1ZpZjd4dDdWN21rNzVZaDlvMGZlMHVqYzdRbm9WM1BqcWhhMTBCUTU0V0l5TzU4eUJZYXJSQ0V2L3VNY2tJcmZiaXFPTklWNUtNTGU3c0JlZFNQWjJiVW12RldEdk0yNWdpMnRZWUhMWFd0aTE4dHh1WG5sTGNwaitIbjJHckZ2L05ad1UrQi9jUk9wWC9mTjBLWlk4S1hObllEclk0U3Y2MTRPRlFjOW5DRzZ6K0JXMU9Fa2dBYnN4V3N3Q29IVFZLcERQZG94VmxadXB2SmRaZVZXS3Q5ZFZ0NU5aWHFucFB4TytQaTFoeVRjUTZVTUZEVFNzNldudGI3M2NGKzdyNzFoR2I1UDIyUE9VTXAvcGdmbzJJb3d6bEx1bU5NYjM0WXB3TTdkYTJ2aEhMM1kyYjFiOEIzNFRwTFB1ZnR3UCtuam5FRzVCa3pibzB6NmJhUlJDWG95R2tsNVJqTk50UTMwVkF0b2x0RlFpU1dHTFlqYldNSk8zeUlXdFloRkxXSlJpMWhVSkRGRDJsamY3SldzYjZ6VU9FRFczN0VPNjFONFlGM1duNnR0dlZLSjVWVmsvZUE2ckM5Z0tWZ3ZrTVljdGJHK2M2N00zaFUwVGJVMjF6OEgveVZzOFQwSGRhcCtCVnVuZXBiUk1rRTF5N2hodEtlM2Rkc1N0ajlkaE5OcUd6WU0vb3ZOZlRpT0F6aGh3MnB6Ukxxd0RxQ0pTTTZTMm5sNzVPc29sMFBlQlpBbHQyVndCMjBBcmFUWno1cDNUUFV1WXlkcnZvUmRwUHgweitFbHRGV3FmZzEya1cvdm9WWFFRWjdQcW05eGhCVVpPY2lYRHFTd2czaGxFSFV1aUFXcVc2ekJ3dTRLRnZZd0MrMVhZV0dDUkV3U0MvZVF2V2M4c25BZUZ4d0E0ZzZDclZEOW96MmZ3ZDdlSmR4NGVnWDdwZzVmeGswQ3k3aDVqSElkZEhMeXRmc3U0eGFCSnpETnVWc0Zuc2Yrb3cwck9EQzFqTTZqamUyTjdRMUxPUGdNRGptNTIrb3ZvNnVPT3Zrdm81czdiM3NHUFc2VGIyMVRiMTk3NHhJT24vM0lONS9zZTlwMlRMYXZoeXdET1ZZenVkUnVjcW9JTGFkanRLQk9rbXViUk81M2syTS9USTc3Q0pVS0MrUVllY0pGUEVpNUNJV2cxK083YkVkOXREZ3RqOUtvTnhBRHpYZ2p2b2QrT1RqbDhiMzRQdUxoKzEzdW5MYUhpMjF2b3JZZm9MYnRxSHNSSFFvZVVmQm1CWSsrUUN2Wm9mUXRKUEN0ZU15ZDAxY1RmSjZBdHA3UG9hLzNNbzdVWVFVQm5rcHRDY0hTOURYYTYyV21iTXJhaWpEYjhEamVWcHl5dDl2eTMxRjAzQVo3NGp0V0VKcnFQZHl6QkgwWjRiRSttc0JMaUN3aGVyYW5id214a3FJVzJ6VVg2TGxJZ2ZpOHJiREhFVkZVMklGMzRsMDJvQTY4bTNKMTFIdTdEYUxlQmZHRHhNdDc4RU51OExxZnZJYVpiVmxCM1ZTUEd6RGlsY1k5VkJZc25IQ0ZZcmdTeFdCZFZ3eFg5Y1Z3NWFzU3Jsai9lNitrdjc5Uy94dXZxcDlEMUhyMFArR0d5MG1xWlFiVmd2NWxISzNVL25BWjAycFJ1MXJVcmhhdGR3Smt2YTNoeWRvYWJxL1U4T2FyYWlqWVY5THdQcnpmZGFRSDNaRGZXWXA5ZmNYWU4zRFUxMXBIYWx2cjIzMlhjRWRKc3hPd0hxTzE4WGdadTUyMlR0ZzV0a3JZT2RaWlorYytZTE83bXphekR4SktuK3RUVDlsNFByUitQTWNxOGJ5VFpMK3JCaDdtd0J1ZUg3YngvQWlWR2MrYjNBMzZVQWtQZTFrUlVJTU5xSThRTlZ6Q3QxUWllaTl0RDArVWJkeUhpb2dPRlJrNlpIdGRuWjB6WFA4N1pHUHowZWdXRzF0aDQzWVFmcmpDSTkrSEg3MFd0SytxUlB0QjB2ZFVEYlFGL3RhUDlzZkswVzVyd28vakk2NTNqOUJvSHE4UXBpV0lTc2Z1TE50VEZYelVEVklLUGthblNHSG5QbzVQMElnbWZCS2Zja1crbXVqZ241NFZERTYxM3RuZ2JxSkRVOFRDOE1TVWJ3VWpuRDN1N0tjblBvdTlmTDRSWlNHeWp6UWVRVGM5Ni9BVE5xS2ZKS25BVWRKM2dFcW5TRU1BenM4ZTk3blZmWTdZYVJPRzNPZCsycVllUXZQL0ExQkxBd1FVQUFBSUNBQk5tdHBPWTFJN2xWRUJBQUFhQWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNaTVqYkdGemM0MVJ5eTRFUVJROU5jYjBHTU40azlpSkNCWkt4bU9CMkFnSkdSWUdDN3ZxN2p1dHBMdHFVbDNqOFZsV0Vnc2Y0S1BFbldiREFwWGNPdmR4NnR4N1UyL3ZMNjhBTmpGWHd3Q21Ba3dIbUJHbzdHbWovYjVBZWZsNjVZcmh3TVlrMEdocFEyZTlMQ1Izb2NLVU14TXRHNm4wU2puZGo3K1NaWCtqYzRINnNUSGtEbEtWNThUaFVrdGIyVTJWNzFpWGJjdVlNaXZ6U0xaMTFrMnA3YTFUQ1MwMmR3VktEK3NDNGxwZ3FLMFRvM3pQc2VaSnk3cEUzbE80Y1N0VnFPWEZZNWZPcVVPT1RFUjdQNHF4OHNveklaY0o4UWpLVXl3dnRmSE5yZTNkZmU1UWE5dWVpK2hJRnl0OG0yRHRWdDBwM3ZUUVJLbk50VWxPeWQvWU9NQnNIV1VNQ2l6K1p3dUIrVi9HRlZqNFd3VHJLUEdYOUk5ZzQ5Nk1GZloyT0Y5aXJLek9QME04c1ZkQzBJOEwzaHFxZk05OE1qQ0U0VUtoZ2pwR3VGN0dhTUZ2WUt6QWNVd1UycE44MXdvVHhVdWcrZ0ZRU3dNRUZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUJObXRwT2ZZS3ErNlFCQUFEbEFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpsVkpOYnhNeEVIMU90MWtTRmhvS0xaUUM0dEJEMHFJWTZNZWxWUTVFUkFJRnBLWWxGeVFrWjNlNmRiV3hnOWNMNG1mMVVGWGl3QS9vajZxWVhUZ2doRkFyeTU0Wis4MzRQWHN1THIvL0FMQ0ZKdzNNWWJtSkFQZERQQWl4SWxEM3h6cGZleTZ3TWRSV3pqTGxqNnliN3NpRXBsYm1zUnpSNTRKeVA3QnV2N0JlZVcxTnZzdHBlOXBvM3hQb3RxK1IxeGtMQkgyYmtNRENVQnQ2WDB3bjVBN1ZKT09keGFHTlZUWldUcGZ4NzgyZ3BDY1F2VEdHWEQ5VGVVNGNkcTkrNTlxTFRhYmJPTkNwVWI1d1hQTHQwTHBVZnFYSjVvbFVFeTBQdjgxb1JFZmt5TVMwOTlkaG9yZ09BM0taRWpOUW5oTDVRUnYvY250bnQ4ZUZtd2UyY0RFTmRFbDI1VjhFdWlmcWkySzlyMDJjMlZ5YjlCMzVZNXVFZUJoaEZZOGl6S01lSWNSamdXZlhVU1d3K2g4ZEFwMHJGK1BmVE1tUEJ2c0M3ZmJIVjUwL25tRG1yTGV4eldSc0hYSHkxSHJxcXl4ajVYUHR6aGhQdVo4Q2JpM1JhcFU2U285bmlCdHNHK3oxVU9NQk5OYzN6aURXejFFNzVhaUdKcS8xQ3ZzSk4zbGQvb1ZDaE50QTVjMVg1d0VXS253TGR5cTdpTHRzQTl6REVtNVZPQ1pTWmVBblVFc0RCQlFBQUFnSUFFMmEyazRVT1JSWDJnQUFBTkFCQUFBUkFBQUFVMmx0Y0d4bFUzUnZjbUZuWlM1emIyeHRqOEZPd3pBUVJPLzVpamxTQ1ZWdzRGUnhnaitJeExHU2F5OWhKY2VPN0hWTGhmcnZiQjBTa3NKeGQzWm4zZ3pKZEwxQmpwNGR5eG43aCszVDluSFhORFlHU2NZS1d1NEhUNjFFdlNSOE5VRGhJQmpLd2JORjFqMjVWeU5HZndBNmttcnR2SHo1TUtFamQxZGZPRGo2SklmbzNadnhoZTZ4V2djNjFmV21PbWwrbGxTc1drM2ZMR3o4ZURMRlgzR3dnTUR6Nm02bjh1WHE5bDZDRlk0Qm1XUzBtOVBXVmxXYkFOVnQyZTlQMU9SUmdiVjh6LzkxLzYyN2FIakwxU25YakhKa09pR1JsQlF5Umx5ZDlIWHpRemxxTjNCcWVHbStBVkJMQXdRVUFBQUlDQUJObXRwT3NsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBRTJhMms1b01pR25TQUVBQUNNQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVEl1WTJ4aGMzT1ZVVXRQQWpFUW5zcGpBVmRSZkNUR3F3Y3hoaW9xRndnWElvbG1OUkdRZTlrZG9HUnBzZHZWK0xNOG1YandCL2lqakxPckoyT01Uakt2YjZaZnZrbmYzbDllQWVBVXRrdVFnWW9ER3c1c01zaTNwSksyelNDelh4MHl5SFowZ0F6S25sUjRIYzlIYUFaaUZCSlM4YlF2d3FFd011bS93S3lkeW9pQmU2RVVtazRvb2dpcHJYbFM4MFVvN0ZpYmVZTUhPTmM4OG5rUDcyS01iRmVibTFoYllhVlcwZDV4dmNtZzJKY1RKV3hzaVBMUzAyYkNIM0IwTXVOaUpQbmdjWUU5SEtOQjVXUHIyekFReEVNTEVaOGdLUkFXQTM0cmxhMmZOWnB0SWk3MWRXeDg3TXBFN001UEFtb3pjUy9vM25QbGh6cVNhbktGZHFvREI3WmN5RUtPd2VGL2JtR3crNHQ2QnRVL2s4RVJMTkUzSmNiSVNRcmxQRldjY29Ma0RwNkJQVkd4QkE3RmZBcDJvVURSL1Z5QUlpeW5UOTEwYXdWVzAxeUd0UlJkcDFoS25SR2FXT0VEVUVzREJCUUFBQWdJQUUyYTJrN2tmVjd3UndFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjNVZSUzA4Q01SQ2U4bHJBVlJRZmlmSHFRVFJhZzhvRndvVklva0VUQWJsM2R3Y29XVnJzZGpYK0xFOG1IdndCL2lqajdPckpHS09Uek92cjlPczM2ZHY3eXlzQW5NSldHYkpRZFdEZGdRMEdoWlpVMHJZWlpQZHFJd2E1amc2UVFhVW5GVjdIY3cvTlVIZ2hJZFdlOWtVNEVrWW0vUmVZczFNWk1YQXZsRUxUQ1VVVUliV0hQYW41SWhSMnJNMjh3UU9jYXg3NXZJOTNNVWEycTgxTnJLMndVcXRvdDk1a1VCcklpUkkyTnNSNDJkTm13aC9RTzVseDRVaytmRnhnSDhkb1VQblkrbllZQ0tLaGdZaFBrQVFJaXdHL2xjcld6eHJOTmhHWEJ6bzJQblpsb25YN3AvZVBadUplMExybnlnOTFKTlhrQ3UxVUJ3NXN1cENEUElPRGY2ekNZT2NYOFF4cWYrYUNZOGpRSnlYR3lFa0o1UUpWbkhLQzVQZWZnVDFSa1FHSFlpRUYyMUNrNkg0T1FBbVcwcXR1T3JVTUsybXV3R3FLcmxFc3A4NElUYXo0QVZCTEF3UVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFM0xtTnNZWE56bFZKZFR4UXhGRDFkaGgxMkhXVUZSQkUxUFBDd0MyWXJxUGdBMlFjM2trQldFL25ZRjU2Nk01ZWhaTFpkT3gySVA4c0hZK0tEUDhBZlpid3ora0NJTVpDbXZmZTI1OXllMC9UbnIrOC9BTHpDc3dhbXNOaEVnSWNoSG9WWUVxajdNNTJ2dmhCWUgyZ3JKNW55cDlhTnQyUkNZeXZ6V0I3UXA0Snl2MnZkeDhKNjViVTErVGJUZHJUUnZpZlFiZCtDMXhrS0JIMmJrTURzUUJ2NlVJeEg1STdVS09PZHVZR05WVFpVVHBmMTM4MmdsQ2NRN1JsRHJwK3BQQ2N1dXplL2MzWGpEY3R0SE9yVUtGODRicmsvc0M2Vmx6UjZlUzdWU011anp4TTZvRk55WkdMYXVYYVlLTzdEZ0Z5bXhBcVVwMFFlYStNM1gyOXQ5N2h4ODlBV0xxWmRYWXBkK3BlQTdybTZVT3ozbllrem0ydVR2aWQvWnBNUWp5TXM0MG1FYWRRamhIZ3E4UHcycmdTVy8rTkRvSFBqWmdJektmbXlabHE3ZmZLMmMrVVJKczU2Rzl0TXh0WVIwOGVNNnFzc1krOVQ3YzRRSy95akF2NWNvdFVxblpRWnp4QXpIQnVjOVZEakFUVFgxcjlDckgxRDdRdFhOVFI1clZkWWl6dThMdjVCSWNJOW9NcW1xL01Bc3hXK2hmdFZuTU04eHdBTGVJQzdGWTZGVkF6OEJsQkxBd1FVQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJPMVhUVy9iTUF5OTUxY0lQU1Z0bHJTSDdWSmtRTGVoUUE5RjF3NDlEZHRnVzNRbXpMRmNXYzRhRFAzdm95VExrdndScDFpMzAzeHBZMUVVK2ZnZUtSY2lXbThpVXZLTVVTWjM1T3ZwNHZYaTdId3ltU1E4bHlKS0pMbURod3BLZWNuRmJjVmxKQm5QUy9Kck1pSDRMSS9KSy84aGQ1ZTM1SnBUeUZydmo1ZG1BK1RWUmhsOVFrY1Z1cm1EQk5nVzZKeDhnQ1JqdWZwUEhRTWZCZDh5Q3ZUSjdDdWxxUHBqd1ZCSS9jUTdDZVhaRzhMb09Wa3V5WDBKYVpXUmxBdFNDQ2doVDRCc1FiQ1VKWHBuczY5aXVTU3NMQ3VnRi9LOGVZMW5zbnhOcWpoejcxem9wZjVqVnVvZ1lRdm9DRTFzVmxNWDBUdzhaZTU1bnltNGU5SFVTSXpqcWMwc29qZHBDcUtCTTRUUCtQdW5nUG14K1pENXg0djA0WXE2MXhHbGVEcWFWMFdSTVJBOUdHdXZEY3AyQThzcFBBSnROczdERTl6UEI3WDlhcVFtUVVVdE8xL3FyT0dhS3dVcHZHQ2c0dHBOZ1NHeWhPU3h1RWx4QTJKcW5DM0pkVlNVUkg0SHJDbVJYUCtIQm5wMUV4VUZwdGVRY3ZXMlQwOHpsVUE1UXNsbkJhaTM3QTlSZ3pRVXBONC9NemJEZ1NuY2tpZ25QTTkySkFZc1RMeGhVbUtKNGgySlNGenRRQXhFYkd0YUNMWlZlV25iT2w1c2cwWThYRXhuTmkxUFFkcnRpbXpLOVFJRlExdHNUYXM4MFUxcURmS2RNcjB3UnpsWFd3WS9pUUJaQ2V5cWxsMHo3d1N6Wm1QeWZHODRSV1hpNlNwajdYd2E3bnVvbUlDcGk0eXNWc2JOekdudFcrTnlHTldNcnpIUWZ1ajhCTkhXYTNnREdmYjNrSG03aDJ4Z3c4Vk9LZEV0dFh1dlh2QlQxdHo2b1VvdndES2Z3Q01yWmRtQlJaSDhNNk5mRmtoQ3hBWGpyUXV1SGhzV0Z0YlpkZG9kQnVjYkJHM1BST2d2OTh5TEJqekQxUkMvb2Via2tHa1FiZ2pnWUk0NXowYWhZYVduRXEwYmppMS9ES3JUeDFNZnEyQlZUWktlRlFkbkYwVWZQelFJVUd5Qmg4c05CeGEyKzN1aE5PM3c1TVQ1QU13dm1Na0tXb2RxUFg5ZHpscHRxSGdZVVlacGhJZHFRMXYvVlhWMEI2MWJDMGZUNEtBZEY1VHV3VU9TTWczNkVGSDVsZ095OGt6NmhlVVp0TzhWT3MzUXBIWEZzQm0zL1BSZE9Gb2liUmV5TS9jUFZ1M3p0THF2amVtVExlajZoNC83UUJFUEZIK25xQzM1by9mM0F0VFVkSzZqSE85Rk9ERHhFRGxJdHA2aHFSNTNIaG9Zc0R1Q25mdGtYOVFYM2hwKzY3NFY0MzFCYll3SkZ4aEl3WE9xQ21NdlJ6VnZHakI3T2s3d1hkSnVPK2FTMDJrODRVWFZYUmJyYUovZGl3SkdVbk1wYmMrTmZZVDh6NzQvWTkvUlVVaSsrcnZnUmVqSFVqTHRvMkRmMVBNcmRnQjE3ZWVMeS9UcE1QNzZuejU3MlR0QzNLZkpiMUJMQXdRVUFBQUlDQUJObXRwT2xnQUJZYjhRQUFBVExRQUFId0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzUEZXb2Q3SE1kMWYwdVVCVTVIbTZJRVNTQmxOZG95U0JHODdRVlVaWXVnZ0tSRTBsUW9LYkcyZ2ljZjd1QzdBeVU2anUwa1RuRjZjeElyMVhJU0pYSnN5MHBDUWxic09EMXhtdE43cjM5RHZpOXhmbTltOStvZURxTDhmUUY1ZTdPemIxNzl6WnMzZS9PRi8vM001NGpJb3Y4cVVZWENFa1VVbHlpaGxGdXJKYnBJMVJJOVErOHFVWTNXWnFsT2pSS3QwN3Y1dHNrUFdrelhacm9Odmx6aXk3UDg0TGtadWx5aTk5RFg4dVc5UE9qclN2UStldjhNZmFCRVgwL2ZNRXZmU0I4czBUZlJOOC9RdDZqMHJTWGFTeCs2anI2TnZuMkd2bU9HdnJORTMwWGZ6WmZ2VWVsN1MzUVg2L1o5OVAwbCtnSDZNTGQrOERyNklmcGh2bnhFcGVlNSswZjQ1a2RWK3JFU0hhUWZWK2tuVlBwSmhhYnZyZGFyN2ZzVm1sallmMTZoeWFPTk9GSG96U3ZWZW5KcVl5MU1tdWVDc0lhZTNTdU5LS2lkRDVwVnZzODZKOXNYcXkyRjlxNVVHNVgxV3RCT0c4MDFweEluYTQxS0s2cWNTMXJ0d3lCYUM2cDFoVzVhZUhMbG1lQlNVS2tGOWRYSzJYYXpXbDg5TEVRR3pWVXd1YUhnc1VJek5SWjdxdkdzUXZQeWVidTZsbFNFTXNlQ2RuSU9keUJUcWhBZ242OEY3WXVWSTlYVjVYbzdXVTJhZURoUkh4eitSS09leEQzRGQxUXh2cHkwTHg2dFZaTjYreDFuVnRqZ0FuV21uazFDOHhtRjlxdzBtcXNWY1ZOWmJ6YmFqYWhScXp6T3R5QzZMbW9tTWRoVWd4cnN1cTJITkdwZVhtODNLa2U3ejBFK2ZXVDUxRU5uTHJBQ3o3V2JRZFErZmdrUEZYcDZvV2RrRUZZcmNkQU8ycGZYazFaRlVCd2VWckRBd1FNOHhNanpRVzBqWWRGVGw3alZyMk8vcEhPNHNuK1hRWnhJdlc0Zm81WkNzN1hHNnJuR2VqV0MrU3JhOEhRQU85dFoxMXhTajRDeVdKQ2ZyYTdXZy9aR0UxcnNyTmJqNUxra2x1b3B0RXVhczlHdTFpb3JWWUdsWGZWR2ZibWY2dnBzMUtOQk0xaEwya216eFZEb0F5dVV5d0NyRGJDOGQydkQ3NGZJMDJPR01PR1pKRTJhc0NvWnk0ODU3anpiRHFKM25ReldoVklxTGFuMFVaVmVVT2xqQ3BYT05qYWFVWEtpeXRyTzhndzZ4T0xMcEpHdTBrK1Y2UUg2YVpWK3Brd3YwcytXNmVmb0paVStYcWFmcDArbzlNa3lmWXBlVnVuVFpYcUZma0dsWHl6VEw5RVZsYTZXYVpOZUxkTm42T1V5dlVhL1hLYlAwdWVZMGErVTZmUE01YlAwcTN6N0NVaS9qTC9Ga3ljWDQxaWxYeXZUcjlOdmxPazM2YmVZdzIrcjlEdGwrbDM2Z2tJSHo1eDQ3RXdTSmRWTFNid1FYbTRuTGQwNXVGR3RINm9nMkhmZ3IyM1l6c0dXUU9CK2xYNnZUTDlQZjZEU0g1YnBqK2kwU2w4czB4L1RueWgwODhWMmUzMnBVdEZkNDVCdUh0SU9HZHFTWjF1MlF2c0taaGNUVng3RzVXelN2RlNORW5ZSmRQclRNdjBaL2JseTY0T081bW1PWm1tMllWcWVwdHVPcm1tNlpydU9wdUZKR3R1aGplY2FudGtXdm5WSEMvamV3SmVwKzdwam1ycnJhemFQaTVNRXZERGVOSGkwNmZNMU5kT2tLNE01bVNCaEtzKzFYVGVDc0d2OEV6SnN6WEpNelVzc3lFazlYYmNFNThoMklkSFU3Y1JNb0tMbzFlRWkwV3RHYVdyRmRpUjZEY2VRdlo3bnVWWm9HTEkzREdSdkdEbVJIVWFTcitrbHNqZldMVDN5VFUvMGdxdnNUVjNUOTZOQWs3MXVScHNHV3FUYnV0VEI4azFRaDEzZmRuM3Vld00rUjErVWVkNTArTCtod2I2TU9rajdxVTFieHNicml3MUxqQ3piWVlud3Z1NXBudVhwSEFVRDFFd3J2azBlQTk2NjVCM0Q5alRoTVdtcU96MzBvSUVQRE50Z0x1alh1ODk4M1lac1cvY3puajd1UEZOdzF1d1FyVnh6WFdkdllhVEc0OEZONi9CZzJXbksydHFhL09lTEQ5TXlYNTIxeWJoWUlwWVliYkpVSjdNQ1hCaGNqS2pNQS8wYU1tZmZ5cm5iV3U0VkgzYjVRR3BQUE1CektCNjY1NDJJaCs2NjI0eUhIYVY5OFhBSzRpSEdkdUtoQjhhSWVGaE9PdTVQU04wV1ZROWZjMmllTzhNOWhiaHdyaGtYaG1GdWdRdERDN2VGQ3dOUHJ4VVhUaGNYWTdCaE9Na1FOb3pBNmNXRzA4V0c0ZGxEMlhRQUdaNXUycUIzb0poQWxZWjdINUxSSS9UZ2UzQnlZVitHSGVGVDRFTzMyZS9zWHc4ZmlVcjJTcisra1ROT1g2OUgzemp1cFM3UTFzaTBOWWEwMVlWdWh1alJ1eEh5UkV0NFJUeHpyRzdXNytBY25IdmxNcVdNSGJkeUdpUHNvOUZZY2g1SHo1THhoc2N0SHRFbnhVU0hLM2xZZmZiNUVwTUNSNXIwUDhmYzBuTDBDUno0bVFXOGh1RzU2UnZTdnQ1WmczL1ExYk5Nd2QwM1dDZjJDK0tETzk4V2Z2Zk51RGNEY1R3N2NUTDk0SFhneWd6MThYRWF3SlNlUjhUcDJMTlZSQkpqZkVSUzZ3MUh4TktkLzhlSWhQN29pS0MyR0lxSTVVUmM2MmhKLzF6Y3hqeTB2T0g0WnR4MHExK3VudzVUQnA2Z0RIcmxEdVpsV0djZ3U0M1VwUUFsOEpESTd4M2ZTWjl6Q3pKMHRDem15cGp4NFV0dWRjWWJjdDdMMmliMXgrRFJrbkpZcjY2Y1hLckYzS0cvSVZZSXJ0WjRKUHVWVjBiYjhoeFlKUEtPWEJYQlNGU1pNRXprSXRZUjNnUm1HQmZRazJlTnhkbVg3NWdNOGViS3hiSU56dlZBQXNhd0pDREV5UHh1KzdHbzJuaE5ZWi9iTHM4QUlZMjFzaTFHSWI0Tk9hc1lUOWtvUjg0UFg4d3VUWk1ZNUpiQnExVUlHMFhsSlo1bWMxQ3UrVHdQbUlmSEs1Y2g0eVZXTk1FdFgvT0d2UWw3bkNKL1pyNlUwb1VmZmN0SEZtQzBNNTgweFVoVGVFelA4YjR0VkpoYm93S3hFNTh1SHhFUkkwTUh1c2VnWTlBYUlTKy9nMFU2ZTBkWXBZc1ZQa2VJSVdLWUk4UWNpUkNlRzJZUFFteUJFRnVUNCswZWhHRDJvQnJYQktiMEFZUTRRZEtIRU1jenQ0RVFIdlZHRVlJWWJvV1FRb3hnWithN1JYN2x6SkFqeGRlTnJKb1NIdVc0aWpaUTQwRmJWNkpHclBpT3RGUlFXSDE1d003bDk5YUkyTzFvWTFCbWJpLzM5R0JLNzJES05ZMHhtQUxvaXF6dnpoRzd6NG9NT2E2ZDlQUE5jMjBrdk1UNEtNSXZlMGhnUU5aRkdtY2R6Mlc1cUFCMW1kV3c1elVrNTZ4ZTlyUnM3WkFjd2RQajJwK2o0NFdlaUIxb2ZhNkdUWk85eTIzNTNMZXpjU2I0R3h4clNIVkU5VzBOZU16aVhPRnpsV2JyTHFqUkV0bVU4NkxvUlkvSk92Sks1Z3ZmSmo3N1hlWlBPUk1FSnJFQ0dZR3N4Zk42VHF4Q1pwNm54UzdGbHpzR3J1ODcxUVFVa3ZzWStGbThNYkJsWlRqRXdkWEc3VmZrdEpKWTdMTVU4enRiQ1F5NTBtZnZKdUMzRE5WNkYrRkNsamwyYzlTN2t5cGNiZnNsYVVYMS9TQUtSMlJxdWNQcjI0MTdnUzY5cGx2eVBwYVkzK2JhMmovTHBaemVLSFUxRi9QSHlOL3ljS3pabXQ0cVkyQm11YkxPa0JpVk5TRlhZaUtLdHNCblFYM0M4OTNYWFJTTnBwYTREbERrYXJvUjZ6cFVSTFlKUW15a3NkZXpUUXMwdWh1bG1wRWttbTBhRWZKSWJNVlJiSm1oNzJwK1QzWGppQlNQWGJKczhUdVdubHF1VUhmckRXUWQzeG0zUDlLSzE3SXhXY2YzL1d2SU9tNWgxdkZFMXNHS21MY2xMakhXN2NrdVRwWmR2SjdzMHNrK3ZwWHJMaXNtcmpmQTN4NlJYM2lud1Y1RDBFQnZaM3R2NkRLVVdRSzVjL3d5WnBiQU5Jc3ppNmQzZUppZW5uUHB6eGQ1cGJDOXJOT3BuWGptdTJJdkliT0xLV3pOczB0bmxnM2tDNHN6d2V2Sk9WbDluZWVXd2VqN0hQMWhKSGRyYXNZRHIrNitNK1JEcm43MTNBWXZ3N3ltWi9jVzRpWHJHTU9MZWFZTCsvaU8vUmpJdkNKM2tmS2RvZ2NJd0Q1RHpFQit5Mlo0bnVoeGVlVnhVenNNZE04M1RRc3dDSk0wQWFRYzB3M3N3TFNzQkQ3RjB1aTREalkrV21BblZoTDVwdVA2aGh1aEJFbVNNSFd4V2tYNEpQakU4dU56cnVlcU04TVJvOTBYNk9YcW56OTliNWhDOGY1MzFCdW0wSXkyOVlhSjY3UnJmY05rajM2LzFNbGU5dUJlbEJFbGtLVDVCUldXS2Q4cmg2SDd1aXNoZlJzNUtVek1jWHU2SElFamQzVkFGZWNsZ1M5VFpodzVIcm1HczRVSnRPVnJodTN4S3d0ZGk0d3NSNGlJMnNQNVlkVDZ0L1U4S0ZyL2hNd00rMElYWGV3aUdMOHlaN2c1MW4yUnp6aXJjT1VtNWtlZXdReFo0N2xwaE9wRnM4TEVjMXpOUWYwYlI1SG1HRTRhV2w2Q1pTTzB6VENLb3pTT2tKdkRXSFBTMkFxeHd2bUJGME5rR0dPKytOMlB3SGUyRXZXalhLNStoVGlQSW04TG5FZWh0aTJjUjZuOTVYL0RqbHBHb2h5enRnL2htdGo3eUxiUjA3WUtmblBDRTErVHU2azh4M3BDdjk1OVgvYk9tbmRMVnRGK3EvdHVTZXdDMlg3czhUcTd1aGlWaVN2dHp0Nk93d3Y4MndYWHp2d2NKVjJtZ2FiTGVvbWZZTStjUDNYbG13dEJrNjlUb2gvck9LL2xkbmQvMkxQakE0MGJaeGhITzdEa0xsMjBQZGt2YlJlendlV3gvTTROY2pNSlFmNDJUcGZyaFloNXpMdlBOTUhDYXp1R0crQ2ZZV284NlRRek5DSXo0TmN1bG1NWkJyL0U4U0luTk8zWU50SWtBaGpzVkV0U096VTFaRi9Ec3RJd2NnTXJ0dUFjRFVrRkRsWklPYWpTUjh2MEYvU1haZm9yK211RmJ1ais4dnRRc3hsYzVwOS9WWHFoVEg5RGY2dlMzNVhwNytrZnl2U1BmUE94TXYwVC9YT1ovb1grVmFHOVcveENYS1ovbzM4djAzOHcvL21Sdjgzemo1di9DWUtSNXlvVTJ0WDlyZjkwK0V3UzlYZkpuLzhWZXN1V3Y5VXI5S2IrSDdjVnVubkVJUXRZdGJCL2l4TVl1L3BQVnl6SEN1MXNYVzYxazdWalNScHMxTUQ2eGo0R2tvclBQd1J0Yml1MHVERDhlSEJFNzZtTm0wYzhVbWkyM1ZpdXQ5b0JXempYSnpYcnh1anJoem9WS3JjYng5Y2IwY1dUMVZxdEtvN0VQQUsxaTQ2VktLU0tzeE9uVTBScDRaSDlvODZlOUlaRWVBTmNHeHVzbGh5QkFEK0tTTFVScnlSWU81eGpycjhid3RiNXJsWm5jMVlHQXk5TzBjeldHdlhWOC9JNFI3bVI5cHB4VTBlL0FSZk1OdEtPNlE4dUZKQnNIWTlCQ093ZGltOXZ0TlRWSkl2ek5ZZ2FaSFpYOXhIUGphQmR5UitlRUxkdGpoRE1lMVEwNFRadm9laHN6SGd1akUvNVRDRy9WMitFY3IzUkRHcVlqYkx4VUJRbHJWYWptYlB0UHpnMFZ5UWZZYnV0Y0lhZk9mSFlXVXpValJha1g4ck91ZXhiMlA5azhUbXJEalhMR1RwczlIRFF1cWhRcVhVeE1QT2tjUGRvWi9ScnZiOVlYdkp1YU5TR2p4N2JhRUJ3dFZIbmN6aDhLT1Q0MGVQTDU0OGZlK2Z4ODhkUG5WTm9UMEdDT3k0Ty95QTgwL0lZa0VMbXVJTk9oYnJkTXVvRWxrSlQ0VWExaGdSMDM4TElZMXJaSVpLKzgxRkRCN21tV3V1MUtnTC85aUovRlI1WG00WnJ4S212d21uNkJISVdac0dwemhtbTNqTkx1L1BaMDN2ZWFWKy9ZMDVzMUNOMjk1bWt2ZEdzSDB0eVQ4YUo5S1JWb09nZzB3SXBOMEtwQW8wbVc5WDNKQ0lMTHVNS0dqWnJlZit3WVZCZWF0QjdORXVoMDBYYWJMRTBEaDFXR3pxR05oSEVNYytFUVJPR2JEeFBkOUlocWhEL1RaRENwNmR3TlhCWHdiZUM3NmtEVjBuNU5Cbzd5TVIxV25UZVNoYXVaVWxBTmpuNG5pV1hQRGxZV1FPeldmUjlhcE4yck55elNSTlhhUElLVFYyaDZVMVNUNzVDTS9kY29WbDhIYnhDcFUyNkRnU2JWRWJYSnUwOHRkZ2hYSm9FeWFLa25KK1VwTGg5MHlhOVdYWnUwaTdaMkgzOUp1M0dveHV1MEkyaWYyN0N5SjdjdEVrM3k5NVg2SlpObWtkNzk1NmxxZGRvNzRYNXFhdDA2eWE5WldsYVdWSjMzN1kwMHpYekVkcU42MjAwU2JmVEhOMEJnKytFUi9iaDJWdnBBWG9ibmFDNzZVbGFvSmdPVUlzTzB2dnc5RVB3M29kQjhSRTQ1MFU0NVNXNDVaTndDcnZxS2VrTzhta0ozNVAwY1RwTTk4SlpjL1E4M1VmM0M2bnZCZWNINGJnSGFKMGVRdDhrT04xRVIrZ29YUHdpemRBeE9nNzN2NFM3RS9RVnBJSzNRZy9qNlF4NEwwTmo2ZnIzWTF3Sk1qYnUyWDM3RmJyajFBSFl2RFM1T0dHd0IrOThucWFVbDEranV5NWNwWDFMVXdjUFhLRzNidExibHFiUnVIdEpuWEJtNW1ibTFWZnA3UXE5UUFjVzUyWW1uemJtMWJtWlYybGhCMzJlOW0vU2dhWForYW41MlZmcG5oMzArQWRubEJlLzlNWFg2Q0JjT1Q5OWxSWmZGc2F4QXcyZ2cyQ3NDa04zd3NSYllOQWVtTFVQQmkzQ0ZCUEdISUVoRjJCS2hIWVZCckNqVWloL0FaK3ZwQldZNVlEdVBqb0pFMkVRbmFMVEFxZ2I5Q2pNVmtUck1iUjJRRXFkemtEYUJHUmRwTFBvbTRTa00zU08zZ0YzTGNKTjU5R2FCcmNqOURoYUtuMFZSdDhCZWtsMW9VTjFvVVAxQktpZUJOVWhtdmdmMnFQU1V5cDk5WmRvTDgycTlEVm9pdjlQaWVzNzVYOG85Tit3VzZHbkJZeUMvd05RU3dNRUZBQUFDQWdBVFpyYVR0M2RzMUZSQVFBQUxBSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE1TG1Oc1lYTnpsVkhKU2dOQkVIMGRZeEpqM0RVcXVYb3dpazVBRVZ3SVNqQWdSTUZFUE9UV21hbkVEcFB1MkQzajhsbWVCQTkrZ0I4bFZrWlBJcUlOVmErVzE2K3I2TGYzbDFjQXUxakpZd3lMV1N4bFVSVElIQ210b3FwQWVyMWR2bWFvbVlBRVpocEswMFU4NkpDOWtwMlFLL01ONDh2d1dsbzF5citLNmVoR09ZSENtZFprYTZGMGpqamRhaWpqRFVNWmRZMGQ3SGtCRFl6bmZLOUp0ekc1cUc3c1pXd2lHU21qM2RyK29VRHFvU0lnMmdJVExkWFRNb290U3g4M2pPMTU5OVRaNlh1eW83eXJ4eUUxcVV1V3RFOUgzNXFCWkQwbU9POGtDQ3c1ZDFobDNYekx4TmFudWhxTnV2clQ4OXQ5ZVNkNTIxUHRoOFlwM1R1bjZNWUVXU3dYa01hNHdPWS9OaEVvL1RLeVFQblBXcWdneFo4ME9vS05KMkhNY0hUQTlSUmpacVAwRFBIRVVRclpVWjd3NnNpeEwzNHlNSUhKUkNHREFxYTRuOFowd3AvQmJJSnptRSswRjlqbkV4UEpUU0QzQVZCTEF3UVVBQUFJQ0FCTm10cE9FL1NieG1FQkFBQldBZ0FBUndBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa1UzUnZjbVZrUkdGMFlVTm9ZVzVuWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenBWRzVUZ014RUgwT1IwSUk5OTBnZ1NpQUFoY2dHaEFTQkpDUVZpQVJsTjdaSFRhT3ZIYmtkY0wvOEFkVVNCUjhBQitGbUYzUzBFQkI0VGVIbjJmZWpEOCszOTRCSEdHampqRXNWN0ZheFpyQW1IR3B3RUhrZkNxZnFIUFlrMzN2Z291ZGtiSHpKRE1LWFpmazBsUGVkelluR2JuMFJLRG1UTkpXWmtBQ3ExRlBEWlhNVk9qS0M1M2UyRUFwK1lKajZXbkVtVHpWVm9jemJyZTcxeFlZYjdxRXMzT1J0blE3eURya0gxVEhjR1l4Y3JFeWJlVjFFWStTNDZHcmM0SE5WbUJCeWFVS3F0bFZOcVhrYWtnMjNJK0VDVFJ1ckNYZk5DclBpZm5OU0R2Wk55bzhPcDhkeTRReUovTll0blRXTjFUVVVpbnQvRjZUaDZpMzNNREhkSzFMZVQ4ZUh4UnpOekNGZWhYckF1Zi9iaWN3WDY3UzhKVzg2L1FvRGdMYmY1ZkZGaXI4cCtERDI4SUVlN3h5VkV0YkcxbFJDR1djNWtpV01UQ3gvd3J4d2s0RkRjYkpNdm1NR2NiR053R3pXQ2p2RjB0Y3dqemJva3dGSzVqRDFCZFFTd01FRkFBQUNBZ0FUWnJhVGhDZnpNOVJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTBMbU5zWVhOemxWSEpTZ05CRUgwZFl6YWowYWhSeWRXREN6b0Jnd2NUZ2hvVWhDaTQ0TUZiWjZhTUhTYmRzWHZHNWJNOENSNzhBRDlLckl5ZVJFUWJxbDR0cjE5WDBXL3ZMNjhBNmxnc1lBeHpXY3huVVJISU5KVldVVXNndlhLMWVzblFOZ0VKbERwSzAwazg2Sks5a04yUUsrV084V1Y0S2EwYTVWL0ZkSFNqbkVEeFNHdXk3VkE2UjV4dWRKVHhocUdNcm8wZGJIc0JEWXpuZk8rTWJtTnkwYUd4cDdHSlpLU01kc3YxaGtEcW9TWWdyZ1R5NTZxblpSUmJsdDd0R052ejdxbTcxZmRrVjNrWGowTTZvMnV5cEgxcWZtc0drdldZNEx5OUlMRGtYS1BGdW9WekUxdWZEdFZvMUtXZm50L3N5enZKMng1b1B6Uk82ZDR4UlRjbXlHS2hpRFRHQmRiL3NZbEE5WmVSQlZiL3JJVWFVdnhKb3lQWWVCTEdERWM3WEU4eFp0YXF6eEJQSEtXUUhlVUpieDg1OXBWUEJ2S1lTQlF5S0dLUysybE1KZndTcGhPY1FUblJubVZmU0V3a040SGNCMUJMQXdRVUFBQUlDQUJObXRwT2NadEprTklEQUFBN0NRQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjNjFWNzNQYlJCQjlGOXRSN2FpdENVa0twYlNsTmFuai9MaVV0SVdTRUhBZHB3MVZISWlOUzRBWlJwR3Vzb0lzR2VtY3BIOE1YNW5oVzJGb1MyR0c2V2YrS0lZOTJjUzBNY1FaYW8xUDB0N3V1N2Q3ZTA5Ly9QbnI3d0N1NGFzMFhzRkNCcU80bHNaVlhNL1FjRVBEdXhta2xDV0Y5ekxJNGVZSTNzZWlocVVSWlBDQmhtVTE4NkVhUHRKUXpCREVMUTBsRFNzYXlnekRzdUZHdVhtR25PRUd2T1daOG40UU5tOXdXelFESGxtODZqWmJucWpLSURRZHNVaitTNjd2eW1XR0svbEJBcWJxRE1sU1lBdUcwNGJyaTBxN3VTM0Ntcm50a1dYVUNDelRxNXVocTk2N3hxUWl4S0N2K2I0SVM1NFpSWUplSndkWUxIZWQrS1hNVnN0N3dIQmVHWVc5WWtxejFEQjlSOWpsWGVITFRSRzFBaitpZGFLOEVZUU8zeFBiQ3p1OEZRWXlzQUtQV3hURW0wSTJBanZpWWRlWkc0R3pPRFVJZy85ZWxPZ2x2TUJobUR2ZTBnd2pRdUhVVGE4dElnMjNxWFRsbnVHZUt4dUdnaTM4QTFidTgxTGd5OUMwWk82d0wwR2VsQTlhd3U3Vm8vUlM4cHZNR3p2bXJzazltdVViMnp2Q2tsUzVReWFHVEhuZkVpM3BVcHlHT3d6cHF1djRwbXlIUk9YN3d3R0tYQ2dvR1hkWDdQUDdiZCtLUS9scTkybnBlQlY5Q2JrdXF5U3FRVHUweEtvYmQvTno0WE1xQldyNnNtOTVRZVQ2em5yTVE4T2Fqbzl4VjhjWXhuVk13TkN4am9xT0RYekNVUHpmdEhTOGhVczZQc1dtaHFxT0dqNWpPTmNyamJudGNwdEMxZDVIdkVhampqcnVNWXpGRlcrYXNzRnZ1YzZhTDRValFoMmZZMHZIRjloaW1EbE9mWFdjeDBXU2xFSE9MRVAyeGQxbXVIREVkbXY0a2lFL2FMY3p2TnBiNHFEdkdDNGR6WStFSk9wYjhGVXYyT3NJbGpHSWtIeExiQ1F2eXdiMWloUmhSMDE2R2Y2TnBoUWlyelR6VExXMnNWbGVXU25XaXFVN3hjcnQ4c3JYNVhxNVVxUFNHUCsyblRFdjFaV21aWW1JUkgyZVpQMjdnV1Q2Q016akt1VXhaQ2pyQ0xubTIySmYySjBwT2tqNXJtSzBwZXR4dzQxVVVxZWV0MUNkS0pCaFBML1dWMTVPMEd5TVI2MmQ3KzhSZUhiWFk4TG8xLzNLeHhkN1haL3h2am5oSW4xT1IwRU5CcGJOcWpOTkgrb0UvU2R3aHF5djBkTXlodWdDTW9YcFIyQ0ZKeGo2a2Q2RzhEcU53K1FET0RnYlI4UmVlQU52QXZHVFFtTjAwVm5xWXYxQTJFbTZyeGQrQnZzSmllbGZrRnovRGFtdEp4aXV6QksrTmp2ekdDY1NUNUVld2pOa25tS0UwVjEvaEpQeFJQTHd4S25aaHdkMHpoSWhZQWM2dnFIRlBiSTE4UTU4M0VVUVV5eDBGaitndUs3RWhxanBLT0l5SmdsbEREZHhCWGtrc2tXaVBVVVdSWHVoVzRKMFlmb1pUajlHOW1IZkN1anhjN29MWDZCL2tpelROTTdFL3JPWWkrOGM4L0hjVlNKM0xxYWRvRjNvL0ZKa3ZVQVlPYXppYmFUL0FsQkxBd1FVQUFBSUNBQk5tdHBPQ0swYVRFY0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QTlPS05BUnlqS1dCSUtMOHAxZm5sK3Q1WGJYWE1mS1lqUElaWDc1SVpra2hvT0pJTzhnYVRLNUI1YjhTK3YxUkJKTlc0Wkd0a1RMYzk0UWRRU3dNRUZBQUFDQWdBVFpyYVRoeit6dHlnQVFBQTV3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjNVZTUVU4VU1SVCt1Z3c3N0RyS2lvZ2lhanh3MkFXelJUUmNJSHRnSTRsbU5SSElYamgxWng1RHlXeTd0aDBOUDRzRE1mSGdEL0JIR2QrTUhvd3hCdEswNzczMisxNi9yK24zSDErL0FYaUZweTNNWWFXTkNBOWlQSXl4S3RBTVo5cXZid2xzanJTVnMwS0ZVK3VtT3pLanFaVStsWWYwc1NRZkRxejdVTnFnZ3JiRzd6SnRUeHNkQmdMOTdnMTR2YkZBTkxRWkNTeU90S0gzNVhSQzdsaE5DdDVaR3RsVUZXUGxkRlgvM293cWVRTEpHMlBJRFF2bFBYSFp2LzZkNjl0YkxMZDFwSE9qUXVtNDVkdVJkYm44VEpPWDUxSk50RHkrbU5FaG5aSWprOUxlWDRlWjRqNE04REluVnFBQ1pYTC9JcEIvc2JNNzRNYnRJMXU2bEE1MEpYYjFYd0w2NStxVFlyK3ZUVnBZcjAzK2pzS1p6V0k4U3JDR3h3bm0wVXdRNDRuQTg1dTRFbGo3ancrQjNyV2JDU3prRktxYWFkM3V5WDd2ajBlWU9SdHNhZ3VaV2tkTW56SnFxSXFDdmM5MWUyTTg0eDhWOGVjU25VN2xwTXA0eGxqZzJPSnNnQVlQb0wyeGVRV3g4UVdOUzY0YWFQUGFyTEVXdDNoZCtZVkNnanRBbmMzWDV4RVdhM3dIZCt1NGhIc2NJeXpqUG03WE9CWlNNL0FUVUVzREJCUUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpjdVkyeGhjM090Vmx0ejIwUVUvamF4bzloUlc5TmNXa0lnWEVKd25JdENBZzJRRXNoRkRnYkZJWmU2bEVLTExHOXNCVmx5cEhXYVB2UEdJODlNbjNqaHJUQ2twVEREOUprL3dneDMrQUVNWjJVVDA4U2R4ak94ck5YdStjNStlODdSMmJQNjhaL3ZmZ0R3RXNveG5NT3JjWnpIYXpITVlEWk96VVVGcjhjUmxaSW81dUpJNFkwdXZJbDVCUXRkaUdOUndaSkVkSW1rRlN6THdWdXl5U2g0V3o3ZmtZMmhZQ1ZPNUZrRnF3cmVWYkRHMENGS2RqQTB5VEJxMko1V2NVeXg1Zm5sQzFxQmx6MHRzTFIxdmxQbGdVaDcvbHJWRTZhd1BUZVlwV2tYYmRjV2N3d1R5UmJtamVRWUlvdGVnVE9jTVd5WFo2dmxQUGMzemJ4RGtyT0daNWxPenZSdE9hNExJOUk4QmpYanV0eGZkTXdnNERTY09QNmFRMU16Wkc3VXJGU2Ntd3o5RXVEcjNPTDJMaS9vdTl3VjZ6eW9rQjZ0dFpzMFBMK28zZUQ1NlcydDRudkNzenhIc3p5ZmEyVXVTbDRoMFB5NnNtWjR4ZG1SRnF4NCtMcGtYYnZqRmFWVExhM08wTVVsVDg1MGFEa0ZHeFJCdlNHNGJJdVNJV2xULzZNVmU5cWk1d3JmdE1UUVVWMmlQQ1Z1Vm5paEVaTDBTYms0bkRTMnpWMVRjMHkzcUszbXQ3a2xLSDVIUkF4eGZjL2lsWkJSd1NaRGJNTXV1cWFvK21UTmwwY25TUHQ4VHY3UW9udmFWdFcxd3FsYXV0NjcyRnBRVDhiZE9lbkhobGYxTFo2MlpSWS8zb3hoUWpwREcwRjNMY2NMYkxlNEVscWs0SktLSEM2cjZNY1RLZ2J3bm9vcmVGL0ZWWHpBc0hRU0JxcDRBVWtWSCtLYWd1c3FQZ0taTWRDSWs1bTN0WUpKTkpRTGdiWkpyWW84TElaRUkvd2J3aWVMVlJSQTRCYXVNYlJkWFZCUnhMS0tFcFlaZWtMZHNpbEsyb0pkekxpQ0Y3bXZ3c2EyaW85Qk1SbHI1Y1dvR01Jd3pXbGwyejlnYnkxZEdBWWZrUzhLSElia2NYY01RM2RqaVlQRVpSZzV0cDFVa25hT3ZLZTA0OTJvbFQvak9DVXBaTlYwVWFKa0U5eXYxYVdHay8reHlVS1RsQlc0ZSszUzZxYStyaS9xbVp5K2RGM1A2Vm5hYUlQR3d6SWd0RW1tdEdsWlBBaUdwaWZwdVBpaWxici9DT3BXeTI0TEJTMVI1Q0xqRnZnZUw5UWdxcExKZXVHcEN0dlJERHVRdnAxK1VFS2hvb2tNdmNsTTB5clZTV2pJUjRtZWJLNFJWT25Jc2JrdkQ3YkQrNGJ3Ym1MSWV1NGgyNkwrMWs2bXdLQ0VTU0Y3blhZUVZIbGhub3pwTTVydEtmbGFxM25LMnQ2bVljSFRkT0NmQjlVZ3NFUkMxaFQ2eUdpbmV3QlBrdlFwNnMyaGpTNGduaHJkQjB2ZFJkdFhOR3JESUxVZHBBUDhSQ3hBWDAwTHorQTVJT3hKTmtZWGJjNGFGK3NnN2doaHQxTGZnSDJOOXRGdkVWbjVIdEVyZDlHUkhTZCtaWHpzRGpyYjd5SFdodnVJMzBNWG82ZTZqMU1TT0gwWU9FUC9mU1JDTE5JVWV5ekVvb2V3cy92b0RvR09veXYxak44KzhHOFlNV3AvaG9wZjBJTmZLVXEvWVFxL0k0cy9zSTAvOFFuK3d1ZjRPL1EvVmZQc3dQOWJzb3lTM3lvK3d3akdpTEVIbjJJY0UyaFB6Rk5NTkpMSStFN1g0eHRMamQ1SDd4MzAzVzRhWGpYc3grcjBrM1JIU1BJaXRWT2gvalI5Rzhybnk3Z1FZak40QmM5U3I1OUNmZzYxWDVTa3p4TkhDdXNZUmV4ZlVFc0RCQlFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBRTJhMms2Nm9rUWVrd0VBQUxRQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1EwTG1Oc1lYTnpqVkpMYnhNeEVQNmNiTE5OV0dnb1VCNEZWRlZSU1ZvSkkvcTR0TW9sQWdrVU9EUnQ3czd1ZE92S3NTT3ZBK3JQNnFHcXhLRS9nQjlWZGJMMEFCd2dzand2ZnpQempUVS9iMzVjQTlqQjZ6cXFXR2tnd3RNWXoySThGNmlGVTEyMDNnbTArdHJKaVZIaHhQbnhuc3hvN0dTUnlvRWVUd3dOZ3ZNcXAzM0dIMmlyUTFmZ1RYdWVoTTVRSU9xNWpBU1crdHJTMStsNFJQNUlqUXhIbHZzdVZXYW92Sjc1ZDhGb1JrZ2crV1F0K1o1UlJVSHNic3pSckxYRC9Pb0RuVnNWcHA1TGZlNDduOHZ2Tk5vK2sycWs1ZEg1aEE3cGhEelpsQTcrZXN4VVVJRUJoY3lKTzZ0QW1UeldOcnpmM2R2dmN1SEd3RTE5U2g5MXlmeVB4bS9QMURmRkEzNndxWEdGdHZrWENxY3VpL0Vpd1NwZUpsaEFMVUdNVi96TDg0d2hzUG9QNGdMci95OGlVTTBwOEwrMU83L05PZkV1dU5RWm1UcFA4cEFUQS9XVU1UeGV0ZDBaWW8zWEkrSk5FYzNtalBQTTRodGprWFdkclM0cWZJREc1dFlseE9ZVktoZnNWZEJnV1N1eHg3akhjdVVYQ2drZUFLVzFVTDVIV0NyeFRUd3M5VEllc1k3d0dFOXd2OFF4a1RJRHQxQkxBd1FVQUFBSUNBQk5tdHBPQVRUMXVwY0JBQUM3QWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNeTVqYkdGemM0MVNRVTlUUVJEK3RqejZiSDFLUlVBRk1jWTAybUxpR2xBdWtGNHFKSkRLZ1dMdjIvZUd4NUx0YnJOdkMvRm5jU0FtSHZnQi9pamo5TWxCUEdpejJaMlozVzltdm04elAzNSt2d0h3QVM5cW1NTktIUkdleEhnYTQ1bEFOWnpwb3ZsZW9OblRUbzZOQ3FmT2o3WmxSaU1uaTFUMjlXaHNxQitjVnpudE1INVhXeDA2QW05YXN5UzBCd0pSMTJVa3NORFRsbzRtb3lINUV6VTBmTFBZYzZreUErWDFOTDY5akthRUJKSURhOGwzalNvSzR2RDFETTJhVzh5djF0ZTVWV0hpdWRSaHovbGNYdEp3NjF5cW9aWW5YOGQwVEtma3lhYTArOWRqcG9JS0RDaGtUdHhaQmNya0YyM0Q1c2Z0blE0WHJ2ZmR4S2UwcjB2bWR4cS9PMWNYaWdYdTJkUzRRdHY4TTRVemw4VllUYkNHNXdubVVVMFFZNTEvZVJZWkFtdi9JQzd3NnY5Rm1HL0JIbVdmV0JaL1g2djloOXl4ZDhHbHpzaVVFZktZOHdOMWxUR3NjcTdWSHVBbFQwbkVBeU1halNuMXFjYzd4ajIyTmZZNnFQQUM2aHR2cnlFMnZxRnl4VkVGZFQ2ckpYWWY5L2xjK1kxQ2dvZEE2YzJYN3hFV1Nud0RqMHE3aU1kc0l5eGhHUTlLSEJNcE0vQUxVRXNEQkJRQUFBZ0lBRTJhMms2ZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZFWldOc2FXNWxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM09sVWsxckZFRVFmYjFKZGpicmFyNDBKbjRjQkE4bWgvUWh3WXNpdUlrTEM0T1NqZVFpQ0wwemxkbGVlcnBudTN2aTcvSVU4T0FQOEVlSk5aTUZMd3FDbDNwZEg2L3FWZEUvZm43N0R1QUVUL3RZd1Y2Q1J3a2VDNndZVndnY3BjNFg4Z3ROaitleThpNjZ6Qm1aT1UreXBEaHplWkNlUXVWc0lKbTY0cFZBTDlSVlpUUjVnZTEwcnE2Vk5Nb1c4aUo2Ylp2OG1yOWFqSE9CenFlaFFMS29YYVRHN2VrUWFzcmZSb0hkVzFxcDRrd09kVEcya1FyeVRPMisxbGJITnl6dHhjR2x3T3FweTBsZ0k5V1czdGZsbFB4SE5UWFV6SFdaTXBmSzY4WmZCbGZqVEFlQnZjbm8vSXd5dzV6ODNUWFpPRm5LRnhpTXJTVi9hbFFJeEpWbnFYYXlNaXBlT1YrK2xEbVZUb1pNVG1oUlU0Z2o1ODladTRxYXljLy8xcFJGOXk5YzdUTWE2VWJFL3AvWVI4MjZBOXpGdlFSUEJJYi9QMVpnOC9mbFAwem5sUEZaRC82NUw1Nmh3ejhCV0FQZmpTMFl1MGhhN0dHOXhmNFM3MkRRb21nV1lMdkJubXg5NWgvZVFIemxSd2ViYkx0TlVIekdGcjhIdHdYWXhvTTJ2OXZhaDdqUDJPZGNCL3ZZd2ZvdlVFc0RCQlFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qVXVZMnhoYzNPVlV0Rk9GREVVUFYyR0hYWWRaVVZCRVRVK0VMTUxabXNFZllGczFJMGtKcXVKUVBhOU8zTlpTbWJicGUxQStDckNBekh4d1Evd280eDNSaDZNTVFiU3RQZmU5dHpUYzVyKytQbnRPNEJOUEcxZ0JrdE5SSGdRNDJHTVpZRjZPTlIrOWFYQStrQmJPYzFWT0xCdThrWm1OTEhTcDNLWGpndnlZY2U2TDRVTkttaHIvQmEzYld1alEwK2cyNzVCWDJjb0VQVnRSZ0x6QTIzb2N6RVprZHRYbzV4M0ZnWTJWZmxRT1YzV1Y1dFJLVThnK1dnTXVYNnV2Q2N1dTllL2MvWFZhNWJiMk5Oam8wTGhtUEx0d0xxeFBLWFJ4cEZVSXkzM3o2YTBTd2ZreUtTMC9kZGhwcGlIQVY2K3l6SkgzbS8xbUs2NVp3dVgwbzR1SlM3LzY5cnVrVHBSN1BLRFNYUHJ0Umwvb25Cb3N4aVBFcXpnY1lKWjFCUEVlQ0x3NGlaZUJGYitvMTZnYzIweUZqZW04TDQ0STNkbFRlQjV1L09ILzZtendhWTJsNmwxeEJ3VEc2aXY4cHdmWUtiZEdlSVpmNmFJLzVWb3RVbzdaY1l6eGh6SEJtYzkxSGdBemJYMVM0aTFyNmhkY0ZWRGs5ZDZoVDNITFY2WGZxT1E0QTVRWmJQVmVZVDVDdC9DM1NvdTRCN0hDUGV4aU5zVmpvVlVIZmdGVUVzREJCUUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTmk1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOaGd1RUEwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0FuWktrSVpxSGpienNNVWcxNVJLdWhhRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TTZEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpBbzl1VkVDUmNaWXJ6MnRKbndSeHlkejdnWVNUNVlMckNIWXpTb2ZHeCtPd3dFMGRDQTVSTWtBY0pod050TGgvYXMzbWdSY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUUyYTJrN0tJeXBtUGdNQUFKTUhBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRZdVkyeGhjM085VmV0T0UwRVUvcVlVVnNxS1ZSSHZDb2phQzdJb2lwZFdWQ3JWa25yRmtCaC82SFE3TEV1Mk8zVjNGdlZGZkFJZlFCUHZKc2JmUHBUeHpOTEl4UXFZR05OMForYWJjNzd6blROblo3Ly8rUHdWd0ZsVXVyRWRwL1JqTklWZVdDbmtNV2JnZEEvT1lOekEyUjRZT0dkZ3dzRDVGRHB4SVVXV0Z3MWNNbEF3VUdRd2w3ZzNQQi81dG5LbHp6QlVsWUZqUFJPMThVV0wxMXlyemhWWEw1b2l0TW90bXdKRGwxcHd3K0V4aG56VmxWYlQ0MnBlQm8wSnF5NGEwZ3B0Njc1NEdvbFFsV1Z3TDVMa1QxNmhkaXU2dnFzbUdlNW0vc0p2YzBIWk9ZWmtTZFlGdzQ2cTY0dmJVYU1tZ2dlODVoR3lxeXB0N3MzeHdOWHJGcGpVQ1ZEdUZkOFhRY25qWVNob09icDFWY09uSnlpaEpERjdETWN6MlZVaVZkVDBTSjBqaUpvclViY2VhR0NjekkxQWhKR25LRks2dXNpWHVCVXAxN09xYnFob3MzK3RUc3F3cFhWc25XM3hqd1hSVG9WSjRrcE5QN2RGTXhacTRESkQ5NnpyK0Z4RkFkR0pyWWd0THNkc2NMVmdUYmxPeFZmQ0VVRmhHZlc0NzFpektuQjlwOURlVG12b296Z3I1bmRxaThMV2FiNzhIVnlWbnkxOU93b0M0U3VyUktYVkJTaitCN1Z4eldabEZOaWk3T3FhNzI5MzVxUGFtMXBzMnJjOUdSTGZMYUVXWk4zQXBJa3J1R3BpRjNhYlNHT25pVDVjTXpHRkVzUGdwdW9OWERjeGpUTERvWTBPMXNRTm5LQ3l0a3VCR21wOXJsckRUUk9IY0poaDVHL2FlZzNYOGdreEhON3dpQmgycjdqOGFqMkc3SmJqMHQzZ0NIVy9mSThoazNrMHRicERtNEZVMHBZNmNDREl1U0dWMElIcHlEb3krczFQY2RzV0lWMUhZM1FoUGY3SE44dnY3Mm52V29SVWtIS0dQWmxLMjM3ZlJydHozSXVvU0JjemYrcjlqWkhzSEFibzB1NEY5UjRTNmJSdU1ZQkc2amY2QkhUUXZ3OTdhTGVmWmlVa1ltUkhMdjhPTERmeURvbmNCM1M4SVNpQnZmVHNJa1BnQ2ZiUnM1OHdNc1YrSEFUaW1hWms5S08rSVJwTitJbzh0TlZNN2kzeHZVWGlJNUxWTCtoOG1PLzRoSzRFdnNINGhHMk14dTU4Y2gyU3luZXV0L21BbnRleGFLM2xBSEVETmt6VUtiTEFNT1l4QVFjVldxL29tMm5wTXpHSkl6aEs2Z2JpRldzaGd6UWJJaVJKNHpIaTBKa2VUMStqSEU3UVRPZGd4VGtCbmJuM01GKzNMWVc1Yk5BS3RVS1hiQkdlUkNZZXM4akZlM21Na0h3Z1JWYmI0K0xoSjFCTEF3UVVBQUFJQ0FCTm10cE9tMWZIbUVJQkFBQWFBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM09WVVV0TEF6RVFudlMxYlYydDFnZUlWdzlXMFFnVkVWcDZLUmFFVmJDdHZhZTcwNXF5VFdxU1ZmeFpuZ1FQL2dCL2xEaTdlaElSSFpqWE56TmZac2piKzhzckFKekFWaFh5VVBkZzNZTU5CcVcyVk5KMUdPVDNHaU1HaGE2T2tFRXRrQXF2a3ZrWXpWQ01ZMExxZ1E1RlBCSkdwdmtYV0hDMzBqTHdMNVJDMDQyRnRVanBZU0ExWDhUQ1RiU1puL0lJNTVyYmtQZnhMa0hyZXRwY0o5b0pKN1d5dTgwV2c4cEFUcFZ3aVNIR2JxRE5sRC9ndURuallpejU4SEdCZlp5Z1FSVmkrMXN4RWtSRERaYmZ1TW5ad0JtcHBxME9NVllIT2pFaDltUzY1UFpQRHgvTnhMMmdPODlWR0d0TGM1Zm9iblhrd2FZUEJTZ3lPUGpIRFF4MmZ0bWFRZVBQWEhBTU9mcWRWQmdwYlVLK1JCRW5ueUxGL1dkZ1R4VGt3Q05ieXNBT2xNbjZudzFRZ2FWczFNKzZsbUVsOHpWWXpkQTFzdFZNR2FHcGxEOEFVRXNEQkJRQUFBZ0lBQW1aMms2RjE4azEwQUlBQUlnSkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJKMVdTMi9iTUF5KzUxZG93VTRGTENWTk1SU0Y2MTY2QWgzYWJVQzJZVmRWWmx4bDFtT1NuTFFZOXQ4blM0bnJKTGFiTHJlUUg4bVBMOUhwMVpNbzBRcU01VXBlanFkNE1rWWdtY3E1TEM3SDM3L2RKT2ZqcTJ5VWFxT1d3Qnp5YUdrdng0L082UXRDQkYyQnhGUlQ5Z2hZbVlKOC9YSlB6dkRFZXhtaDdTK1lYRHhaM3BpdDEydThuZ1dEMDhsa1NuN2UzODI5QjBFVExxMmpra0hiM1BJTEc3UjNpbEVYYUw0YUh2VWhubXdlaFVuQVlmOS9uSVZncVZBNWxEOWlKYktnVGNtT2JCUnhoVkdWdnMwenBnU21ncFpPWVYxU3QxQkdmRWpKVmh1eDFEaStvTXg1UVE1Q0pWVHJ4QW92VFppU3puaE5TbHFZYUxUcFJqYXRHYXgyZy9zK2FQQUdZTE9tUkduTTB2UFJ2QVNEcmFvTUEyOStucEp1VmErcG82WUExMm02VVVVYXBNMGppbkxRSUhNL083dmNHdkh6aTNDbmpMNHJlQTBQcytWZTdScGdxejVNR1Rnc1dJTmNOYzJiNFdtcmRBMkE3TE5wU1ZxcFBGUzhiUGxPZFZrVmZqTDNva1hwcnZBZ3M4M294VnB1L1BRa3VwOXNITk1sTlVtMDYwOThKM21mT2o3dFNMNEIrc2xiOEtJeVlaY085UnNhN0pHdm9Gc2JFWGwrWHhPOEJzc00xMDZaekptcTdzNmhvdCtMb0pJdndMcCt5RGJZTlN4b1ZicGJvVXNRSUYxZy85SHZVTjIzSnZJZzZ0Z1ljdzJNTHpnYkRORUo2aytVdko1cFU0emorTzdtbUZ4VEI5bjdQM0hRd2dCang0WDNSb1grbTVJdTlCRnNCNm5VQTlrekppa1ptREwvZW5Tc3puSDdOUFJTQkhCclJ3STJpV3YwcGhVNnc2ZnRwemQ5bHlTSVVTbVZRNVV1RE0wQk9ZWHFFekZERDhCb1pRRnhod3o4cnJnQml6N1JGVVhUS1VxUy8xdy8vMmo4b2dWOHBnSXkzam92dUQ0aTJESmZ3UmFpMjBkODZ2MFdPaTVqTEd1WWJ5eVhaT241a1pRY0l2bzhsVHpuN25rZThEZitHZ3hOZXU1THdQeldQNy9FOHpVSnB2N2xlOUgyZStDU2xWWCs2Z0pzWU5uSkNUbnhoNjFNeVZZeU1OakR2dXVhSEpIckc2ZDdLN0hibTdPNUw2TndSdXZQcW16MEQxQkxBUUlVQXhRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBQUFBQUFBQUFBQUNrZ1FBQUFBQk5SVlJCTFVsT1JpOU5RVTVKUmtWVFZDNU5SbEJMQVFJVUF3b0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBRUFEdFFjNEFBQUJOUlZSQkxVbE9SaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUJBQTdVSDFBQUFBYVc4dlVFc0JBaFFEQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUFBQUFBQUFBQVFBTzFCRmdFQUFHbHZMM0JzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUJBQTdVRkJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUJVQUFBQUFBQUFBQUFBUUFPMUJjUUVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFFQUR0UWFRQkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3RUNGQU1LQUFBSUFBQk9tdHBPQUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFCQUE3VUhSQVFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlVFc0JBaFFEQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQVFBTzFCRXdJQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDFCTEFRSVVBeFFBQUFnSUFFMmEyazdZODZmQW9nRUFBT2dDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVzBDQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWOEVBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1VvR0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbXBzUzZzMEFnQUFHZ1FBQUNRQUFBQUFBQUFBQUFBQUFLU0Iyd2NBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSkdVVk4wWVhSMWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVkVLQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1B3cUJOb0FFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dVUU1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1RRT0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnU2NRQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVPRWdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNFVXS2tCRVJ3QUFFbHBBQUF2QUFBQUFBQUFBQUFBQUFDa2dhVVRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUU13QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tmk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2dWazBBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazV5TGMzOVJ3RUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVlkyQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25BdDdZUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dlMDNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTFMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVJM096NUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCZ2prQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaStNdk9CUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0JHVHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNmhaeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2diSThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG9uWUFyZ2tEZ0FBalRNQUFDZ0FBQUFBQUFBQUFBQUFBS1NCUno0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJR3hUQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFBQUFBQUFBQUFBQUtTQlNrNEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG4yQ3F2dWtBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCT0ZBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaFE1RkZmYUFBQUEwQUVBQUJFQUFBQUFBQUFBQUFBQUFLU0JMRklBQUZOcGJYQnNaVk4wYjNKaFoyVXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUckpmRzNWWEF3QUFHQWdBQURJQUFBQUFBQUFBQUFBQUFLU0JOVk1BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtZ3lJYWRJQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQjNGWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVSOVh2QkhBUUFBSVFJQUFERUFBQUFBQUFBQUFBQUFBS1NCZEZnQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFBQUFBQUFBQUFBQXBJRUtXZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0VwTWErS0lEQUFCcUVBQUFHQUFBQUFBQUFBQUFBQUFBcElIOFd3QUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5c1VFc0JBaFFERkFBQUNBZ0FUWnJhVHBZQUFXRy9FQUFBRXkwQUFCOEFBQUFBQUFBQUFBQUFBS1NCMUY4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMVJsYzNRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE8zZDJ6VVZFQkFBQXNBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSFFjQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ1hCeUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0UW44elBVUUVBQUN3Q0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbkdiU1pEU0F3QUFPd2tBQUNvQUFBQUFBQUFBQUFBQUFLU0IxblVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNElyUnBNUndBQUFFd0FBQUJLQUFBQUFBQUFBQUFBQUFDa2dmQjVBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOXdiMjB1Y0hKdmNHVnlkR2xsYzFCTEFRSVVBeFFBQUFnSUFFMmEyazRjL3M3Y29BRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWjk2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dZOThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2YVM0M0ptUUVBQU4wQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1MyQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnUmFEQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJSHhoQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRwMzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQjBJWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUFBQUFBQUFBQUFBS1NCVDRzQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VVUmxZMnhwYm1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VXTkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazduZkFaY1JnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVEdQQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRzb2pLbVkrQXdBQWt3Y0FBRElBQUFBQUFBQUFBQUFBQUtTQnhwQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHB0WHg1aENBUUFBR2dJQUFERUFBQUFBQUFBQUFBQUFBS1NCVkpRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FBSm1kcE9oZGZKTmRBQ0FBQ0lDUUFBUXdBQUFBQUFBQUFBQUFBQXBJSGxsUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJGQkxCUVlBQUFBQU5nQTJBQ2tUQUFBV21RQUFBQUE9XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOmZhbHNlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJkZW1vLWFwcC1zbWFydC1jb250cmFjdC0xLjEuamFyXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ0MTE3fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE4MjM3NDc2MX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlBPUmV2aWV3IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUE9SZXZpZXdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVGVtcGxhdGUgZmlsZSBmb3IgZW1haWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHdvcmtmbG93IHNlcnZpY2UgZm9yIFB1cmNoYXNlT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4MjYsXCJyZXZpc2lvbklkXCI6XCJjOGI3ODVjNTgzMWVhNjI4ZDkwNzA1NzA4MjBjMzRkNFwiLFwiaXRlbUJ5dGVzXCI6XCJQQ0ZrYjJOMGVYQmxJR2gwYld3K0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWlCNGJXeHVjenAyUFNKMWNtNDZjMk5vWlcxaGN5MXRhV055YjNOdlpuUXRZMjl0T25adGJDSWdlRzFzYm5NNmJ6MGlkWEp1T25OamFHVnRZWE10YldsamNtOXpiMlowTFdOdmJUcHZabVpwWTJVNmIyWm1hV05sSWo0S0NUeG9aV0ZrUGdvSkNUd2hMUzBnVGtGTlJUb2dNU0JEVDB4VlRVNGdMU0JDUVU1RVJVUWdMUzArQ2drSlBDRXRMVnRwWmlCbmRHVWdiWE52SURFMVhUNEtDUWs4ZUcxc1Bnb0pDUWs4YnpwUFptWnBZMlZFYjJOMWJXVnVkRk5sZEhScGJtZHpQZ29KQ1FrOGJ6cEJiR3h2ZDFCT1J5OCtDZ2tKQ1R4dk9sQnBlR1ZzYzFCbGNrbHVZMmcrT1RZOEwyODZVR2w0Wld4elVHVnlTVzVqYUQ0S0NRa0pQQzl2T2s5bVptbGpaVVJ2WTNWdFpXNTBVMlYwZEdsdVozTStDZ2tKUEM5NGJXdytDZ2tKUENGYlpXNWthV1pkTFMwK0Nna0pQRzFsZEdFZ1kyaGhjbk5sZEQwaVZWUkdMVGdpUGdvSkNUeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlsZ3RWVUV0UTI5dGNHRjBhV0pzWlNJZ1kyOXVkR1Z1ZEQwaVNVVTlaV1JuWlNJK0Nna0pQRzFsZEdFZ2JtRnRaVDBpZG1sbGQzQnZjblFpSUdOdmJuUmxiblE5SW5kcFpIUm9QV1JsZG1salpTMTNhV1IwYUN3Z2FXNXBkR2xoYkMxelkyRnNaVDB4SWo0S0NRazhkR2wwYkdVK1NXNWpiMjFwYm1jZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z1VtVjJhV1YzUEM5MGFYUnNaVDRLQ1FrS0NRazhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGdvSkNRa0pjSHNLQ1FrSkNRbHRZWEpuYVc0Nk1UQndlQ0F3T3dvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1hSaFlteGxld29KQ1FrSkNXSnZjbVJsY2kxamIyeHNZWEJ6WlRwamIyeHNZWEJ6WlRzS0NRa0pDWDBLQ1FrSkNXZ3hMR2d5TEdnekxHZzBMR2cxTEdnMmV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pmUW9KQ1FrSmFXMW5MR0VnYVcxbmV3b0pDUWtKQ1dKdmNtUmxjam93T3dvSkNRa0pDV2hsYVdkb2REcGhkWFJ2T3dvSkNRa0pDVzkxZEd4cGJtVTZibTl1WlRzS0NRa0pDUWwwWlhoMExXUmxZMjl5WVhScGIyNDZibTl1WlRzS0NRa0pDWDBLQ1FrSkNXSnZaSGtzSTJKdlpIbFVZV0pzWlN3alltOWtlVU5sYkd4N0Nna0pDUWtKYUdWcFoyaDBPakV3TUNVN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSkNYZHBaSFJvT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWtqYjNWMGJHOXZheUJoZXdvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1dsdFozc0tDUWtKQ1FrdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPbUpwWTNWaWFXTTdDZ2tKQ1FsOUNna0pDUWwwWVdKc1pYc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGJITndZV05sT2pCd2REc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGNuTndZV05sT2pCd2REc0tDUWtKQ1gwS0NRa0pDUzVTWldGa1RYTm5RbTlrZVhzS0NRa0pDUWwzYVdSMGFEb3hNREFsT3dvSkNRa0pmUW9KQ1FrSkxrVjRkR1Z5Ym1Gc1EyeGhjM043Q2drSkNRa0pkMmxrZEdnNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1hBc1lTeHNhU3gwWkN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1cxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9tVjRZV04wYkhrN0Nna0pDUWw5Q2drSkNRbGhXMmh5WldaZVBYUmxiRjBzWVZ0b2NtVm1YajF6YlhOZGV3b0pDUWtKQ1dOdmJHOXlPbWx1YUdWeWFYUTdDZ2tKQ1FrSlkzVnljMjl5T21SbFptRjFiSFE3Q2drSkNRa0pkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9tNXZibVU3Q2drSkNRbDlDZ2tKQ1Fsd0xHRXNiR2tzZEdRc1ltOWtlU3gwWVdKc1pTeGliRzlqYTNGMWIzUmxld29KQ1FrSkNTMXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWw5Q2drSkNRa3VSWGgwWlhKdVlXeERiR0Z6Y3l3dVJYaDBaWEp1WVd4RGJHRnpjeUJ3TEM1RmVIUmxjbTVoYkVOc1lYTnpJSFJrTEM1RmVIUmxjbTVoYkVOc1lYTnpJR1JwZGl3dVJYaDBaWEp1WVd4RGJHRnpjeUJ6Y0dGdUxDNUZlSFJsY201aGJFTnNZWE56SUdadmJuUjdDZ2tKQ1FrSmJHbHVaUzFvWldsbmFIUTZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNXRmJlQzFoY0hCc1pTMWtZWFJoTFdSbGRHVmpkRzl5YzExN0Nna0pDUWtKWTI5c2IzSTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYUmxlSFF0WkdWamIzSmhkR2x2YmpwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxemFYcGxPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRbG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxM1pXbG5hSFE2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDV3hwYm1VdGFHVnBaMmgwT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNTBaVzF3YkdGMFpVTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNXRXViV051UW5WMGRHOXVld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRbDlDZ2tKQ1FrdWJXTnVTVzFoWjJWN0Nna0pDUWtKZG1WeWRHbGpZV3d0WVd4cFoyNDZZbTkwZEc5dE93b0pDUWtKZlFvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MGV3b0pDUWtKQ1hkdmNtUXRZbkpsWVdzNlluSmxZV3N0ZDI5eVpEc0tDUWtKQ1gwS0NRa0pDUzV0WTI1VVpYaDBRMjl1ZEdWdWRDQnBiV2Q3Q2drSkNRa0phR1ZwWjJoME9tRjFkRzhnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNXRZMjVFYVhacFpHVnlRbXh2WTJ0N0Nna0pDUWtKZEdGaWJHVXRiR0Y1YjNWME9tWnBlR1ZrSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKWW05a2VTd2pZbTlrZVZSaFlteGxld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tTW1ZeVpqSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSkkySnZaSGxEWld4c2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURFS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYVhKemRDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSFJvWlNCc1lYSm5aWE4wSUc5bUlIbHZkWElnYUdWaFpHbHVaM011Q2drSkNVQnpkSGxzWlNCb1pXRmthVzVuSURFS0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOakEyTURZd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBCY21saGJDd2dKMGhsYkhabGRHbGpZU0JPWlhWbEp5d2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk16QndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXpkSGxzWlRwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tSnZiR1E3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4bGRIUmxjaTF6Y0dGamFXNW5PaTB4Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFZV2RsQ2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01nb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdZV3hzSUhObFkyOXVaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ01nb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qSTBjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklETUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCMGFHbHlaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ013b0pDUWtxTHdvSkNRa0phRE43Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTRjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdhVzRnZVc5MWNpQmxiV0ZwYkhNdUlGUm9aWE5sSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMjFoYkd4bGMzUWdiMllnZVc5MWNpQm9aV0ZrYVc1bmN5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dOQW9KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakUyY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUhKbGFHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQlRkSGxzWlFvSkNRbEFkR2x3SUZObGRDQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUJoYm1RZ1ltOXlaR1Z5Y3lCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObVptWm1abVk3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTEwYjNBNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxXSnZkSFJ2YlRvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxYUnZjRG95Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pKd2VEc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlGUmxlSFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdkR1Y0ZEM0Z1EyaHZiM05sSUdFZ2MybDZaU0JoYm1RZ1kyOXNiM0lnZEdoaGRDQnBjeUJsWVhONUlIUnZJSEpsWVdRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZMjlzYjNJNkl6WTFOalUyTlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaExDQldaWEprWVc1aExDQlRaV2R2WlN3Z2MyRnVjeTF6WlhKcFpqc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2JHbHVhM011SUVOb2IyOXpaU0JoSUdOdmJHOXlJSFJvWVhRZ2FHVnNjSE1nZEdobGJTQnpkR0Z1WkNCdmRYUWdabkp2YlNCNWIzVnlJSFJsZUhRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElHRXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTlRZMU5qVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCSVpXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1NHVmhaR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWSVpXRmtaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPakl3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pJd2NIZzdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJSFJsZUhRdUlFTm9iMjl6WlNCaElITnBlbVVnWVc1a0lHTnZiRzl5SUhSb1lYUWdhWE1nWldGemVTQjBieUJ5WldGa0xnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZEN3amRHVnRjR3hoZEdWSVpXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pPRGxpWXpVMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlWHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxaWIzUjBiMjA2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxMGIzQTZPWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFdKdmRIUnZiVG94TW5CNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRUp2WkhrS0NRa0pRSE5sWTNScGIyNGdRbTlrZVNCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0IwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCaWIyUjVJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VTQXViV051VkdWNGRFTnZiblJsYm5RZ1lTd2pkR1Z0Y0d4aGRHVkNiMlI1SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNNE9XSmpOVFU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQkdiMjkwWlhJS0NRa0pRSE5sWTNScGIyNGdSbTl2ZEdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2psd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MWliM1IwYjIwNk9YQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVadmIzUmxjZ29KQ1FsQWMyVmpkR2x2YmlCR2IyOTBaWElnVkdWNGRBb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUdadmIzUmxjaUIwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1JtOXZkR1Z5Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFwYmkxM2FXUjBhRG8zTmpod2VDbDdDZ2tKQ1FrdWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhKN0Nna0pDUWtKZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIa3NkR0ZpYkdVc2RHUXNjQ3hoTEd4cExHSnNiMk5yY1hWdmRHVjdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT201dmJtVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGw3Q2drSkNRa0pkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FralltOWtlVU5sYkd4N0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UQndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxld29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhKMFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVWRzl3UTI5dWRHVnVkQ3d1YldOdVVtVmpRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia0p2ZEhSdmJVTnZiblJsYm5Rc0xtMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVKYldGblpVZHliM1Z3UTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2Ymt4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmxKcFoyaDBWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrTmhjSFJwYjI1TVpXWjBTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVVtbG5hSFJKYldGblpVTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia2x0WVdkbFEyRnlaRXhsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeWV3b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkhjbTkxY0VOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp6bzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYQjBhVzl1VEdWbWRFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtOaGNIUnBiMjVTYVdkb2RFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZPWEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1ZHOXdTVzFoWjJWRGIyNTBaVzUwTEM1dFkyNURZWEIwYVc5dVFteHZZMnRKYm01bGNpQXViV051UTJGd2RHbHZibFJ2Y0VOdmJuUmxiblE2YkdGemRDMWphR2xzWkNBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFEyRnlaRUp2ZEhSdmJVbHRZV2RsUTI5dWRHVnVkSHNLQ1FrSkNRbHdZV1JrYVc1bkxXSnZkSFJ2YlRvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVKYldGblpVZHliM1Z3UW14dlkydEpibTVsY25zS0NRa0pDUWx3WVdSa2FXNW5MWFJ2Y0Rvd0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUjNKdmRYQkNiRzlqYTA5MWRHVnlld29KQ1FrSkNYQmhaR1JwYm1jdGRHOXdPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0WW05MGRHOXRPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5c2RXMXVld29KQ1FrSkNYQmhaR1JwYm1jdGNtbG5hSFE2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtUR1ZtZEVsdFlXZGxRMjl1ZEdWdWRDd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUkpiV0ZuWlVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MXlhV2RvZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTndjbVYyYVdWM0xXbHRZV2RsTFhWd2JHOWhaR1Z5ZXdvSkNRa0pDV1JwYzNCc1lYazZibTl1WlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTVFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdacGNuTjBMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRElLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0J6WldOdmJtUXRiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNd29KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSFJvYVhKa0xXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3pld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFSnZlR1ZrSUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliM2hsWkNCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRnVjJVZ2NtVmpiMjF0Wlc1a0lHRWdabTl1ZENCemFYcGxJRzltSUdGMElHeGxZWE4wSURFMmNIZ3VDZ2tKQ1NvdkNna0pDUWt1YldOdVFtOTRaV1JVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrSnZlR1ZrVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCV2FYTnBZbWxzYVhSNUNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCMmFYTnBZbWxzYVhSNUlHOW1JSFJvWlNCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWmIzVWdZMkZ1SUdocFpHVWdhWFFnZEc4Z2MyRjJaU0J6Y0dGalpTNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjbnNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WkdsemNHeGhlVHB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCUWNtVm9aV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSEJ5WldobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliMlI1SUhSbGVIUWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJYWlNCeVpXTnZiVzFsYm1RZ1lTQm1iMjUwSUhOcGVtVWdiMllnWVhRZ2JHVmhjM1FnTVRad2VDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdUV0ZyWlNCMGFHVWdabTl2ZEdWeUlHTnZiblJsYm5RZ2RHVjRkQ0JzWVhKblpYSWdhVzRnYzJsNlpTQm1iM0lnWW1WMGRHVnlJSEpsWVdSaFltbHNhWFI1SUc5dUlITnRZV3hzSUhOamNtVmxibk11Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV6Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pmVHd2YzNSNWJHVStQQzlvWldGa1Bnb0pQR0p2WkhrZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUdHRZWEpuYVc0NklEQTdjR0ZrWkdsdVp6b2dNRHQzYVdSMGFEb2dNVEF3SlRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1R4alpXNTBaWEkrQ2drSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQm9aV2xuYUhROUlqRXdNQ1VpSUhkcFpIUm9QU0l4TURBbElpQnBaRDBpWW05a2VWUmhZbXhsSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDUWs4ZEhJK0Nna0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlHbGtQU0ppYjJSNVEyVnNiQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjRG9nTURzaVBnb0pDUWtKQ1R3aExTMGdRa1ZIU1U0Z1ZFVk5VRXhCVkVVZ0x5OGdMUzArQ2drSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnBaRDBpZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWm1abVpqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklESndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWNISmxhR1ZoWkdWeVEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblFpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE9IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak5qVTJOVFkxTzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yWnZiblF0YzJsNlpUb2dNVEJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxY2lCb1lYWmxJR0VnYm1WM0lHbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzTGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxTR1ZoWkdWeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU1tWXlaakk3WW05eVpHVnlMWFJ2Y0RvZ01EdGliM0prWlhJdFltOTBkRzl0T2lBd08zQmhaR1JwYm1jdGRHOXdPaUF5TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBeU1IQjRPeUkrQ2drSkNRa0pDUWtKUENFdExWdHBaaUJuZEdVZ2JYTnZJRGxkUGdvSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUluUmxiWEJzWVhSbFEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdHRZWGd0ZDJsa2RHZzZJRFl3TUhCNElDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVKYldGblpVSnNiMk5yU1c1dVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnZDJsa2RHZzlJakV3TUNVaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051U1cxaFoyVkRiMjUwWlc1MElpQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklEQndlRHR3WVdSa2FXNW5MV3hsWm5RNklEQndlRHR3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdDBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQR2x0WnlCaGJHbG5iajBpWTJWdWRHVnlJaUJoYkhROUlpSWdjM0pqUFNKb2RIUndjem92TDNCdmNuUmhiQzV3YkdGMFptOXliVFl1YVc4dmMzUmhkR2xqTDJ4dloybHVYM0JoWjJVdmNHeGhkR1p2Y20wMkwyeHZaMjh1Y0c1bklpQjNhV1IwYUQwaU1qWXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF5TmpCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdGthWE53YkdGNU9pQnBibXhwYm1VZ0lXbHRjRzl5ZEdGdWREdDJaWEowYVdOaGJDMWhiR2xuYmpvZ1ltOTBkRzl0TzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHTnNZWE56UFNKdFkyNUpiV0ZuWlNJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFFtOWtlU0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpSa1pHUmtaR08ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXhNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaVltOWtlVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0ZEc5d09pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpZDJsa2RHZzZNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaWJXRjRMWGRwWkhSb09pQXhNREFsTzIxcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkRiMjUwWlc1MElpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRJREU0Y0hnZ09YQjRPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak16TXpNek16TzJadmJuUXRjMmw2WlRvZ01UUndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCc1pXWjBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHZ3pJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME8yUnBjM0JzWVhrNklHSnNiMk5yTzIxaGNtZHBiam9nTUR0d1lXUmthVzVuT2lBd08yTnZiRzl5T2lBak5qQTJNRFl3TzJadmJuUXRabUZ0YVd4NU9pQklaV3gyWlhScFkyRTdabTl1ZEMxemFYcGxPaUF4T0hCNE8yWnZiblF0YzNSNWJHVTZJRzV2Y20xaGJEdG1iMjUwTFhkbGFXZG9kRG9nWW05c1pEdHNhVzVsTFdobGFXZG9kRG9nTVRJMUpUdHNaWFIwWlhJdGMzQmhZMmx1WnpvZ0xURndlRHNpUGtsdVltOTFibVFnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnY21WMmFXVjNQQzlvTXo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4WkdsMklITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJMmxtSUhWelpYSXVabWx5YzNST1lXMWxQejhnSmlZZ2RYTmxjaTVtYVhKemRFNWhiV1UvYUdGelgyTnZiblJsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMmxtSUhWelpYSXViR0Z6ZEU1aGJXVS9QeUFtSmlCMWMyVnlMbXhoYzNST1lXMWxQMmhoYzE5amIyNTBaVzUwUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bWFYSnpkRTVoYldWOUxBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05sYkhObFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM4amFXWStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd2paV3h6WlQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVsYldGcGJIMHNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZJMmxtUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aWNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSldXOTFJR2hoZG1VZ1lTQnVaWGNnYVc1aWIzVnVaQ0JQY21SbGNpQjBieUJ5WlhacFpYY3VJRkJzWldGelpTQThZU0JvY21WbVBTSWtlMmh5WldaOUlpQjBZWEpuWlhROUlsOWliR0Z1YXlJK2JHOW5JRzl1SUdGdVpDQmhZMk5sY0hRZ2IzSWdjbVZxWldOMExqd3ZZVDQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKSm01aWMzQTdQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0OGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdkR0ZpYkdVdGJHRjViM1YwT2lCbWFYaGxaQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3Y0dGa1pHbHVaem9nTlhCNElERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNDMTNhV1IwYURvZ01uQjRPMkp2Y21SbGNpMTBiM0F0YzNSNWJHVTZJRzV2Ym1VN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvZ0kwVkJSVUZGUVR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeHpjR0Z1UGp3dmMzQmhiajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFFvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHTnNZWE56UFNKdFkyNUVhWFpwWkdWeVFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jNklERTRjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGFISWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQnpkSGxzWlQwaVltOXlaR1Z5TFdKdmRIUnZiUzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0YkdWbWRDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRjbWxuYUhRdFkyOXNiM0k2Ym05dVpUc2dZbTl5WkdWeUxXSnZkSFJ2YlMxM2FXUjBhRG93T3lCaWIzSmtaWEl0YkdWbWRDMTNhV1IwYURvd095QmliM0prWlhJdGNtbG5hSFF0ZDJsa2RHZzZNRHNnYldGeVoybHVMWFJ2Y0Rvd095QnRZWEpuYVc0dGNtbG5hSFE2TURzZ2JXRnlaMmx1TFdKdmRIUnZiVG93T3lCdFlYSm5hVzR0YkdWbWREb3dPeUlnTHo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsUm05dmRHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBNWNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHNpUGdvSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSjBaVzF3YkdGMFpVTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdiV0Y0TFhkcFpIUm9PaUEyTURCd2VDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW1admIzUmxja052Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYXlJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTBsdWJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0YkdWbWREb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZENJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdVlXMWhiSFJ2TG1OdmJTOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdVptRmpaV0p2YjJzdVkyOXRMMkZ0WVd4MGIzUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdFptRmpaV0p2YjJzdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1YkdsdWEyVmthVzR1WTI5dEwyTnZiWEJoYm5rdllXMWhiSFJ2TFhSbFkyaHViMnh2WjJsbGN5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0OGFXMW5JSE55WXowaWFIUjBjRG92TDJOa2JpMXBiV0ZuWlhNdWJXRnBiR05vYVcxd0xtTnZiUzlwWTI5dWN5OXpiMk5wWVd3dFlteHZZMnN0ZGpJdlkyOXNiM0l0YkdsdWEyVmthVzR0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5MGQybDBkR1Z5TG1OdmJTOUJiV0ZzZEc4aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWFIzYVhSMFpYSXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREE3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1ZVc5MWRIVmlaUzVqYjIwdlkyaGhibTVsYkM5VlF6bFhXQzFxUldGRFdHMDRWRll6Y21SalEyazNZM2NpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxYbHZkWFIxWW1VdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0MFlXSnNaUzFzWVhsdmRYUTZJR1pwZUdWa0lDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdHdZV1JrYVc1bk9pQTFjSGdnTVRod2VDQXlNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ6YjJ4cFpEdGliM0prWlhJdGRHOXdMV052Ykc5eU9pQWpSVVZGUlVWRk8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSE53WVc0K1BDOXpjR0Z1UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdENna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNVGh3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9jaUJqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJSE4wZVd4bFBTSmliM0prWlhJdFltOTBkRzl0TFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxc1pXWjBMV052Ykc5eU9tNXZibVU3SUdKdmNtUmxjaTF5YVdkb2RDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRZbTkwZEc5dExYZHBaSFJvT2pBN0lHSnZjbVJsY2kxc1pXWjBMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXlhV2RvZEMxM2FXUjBhRG93T3lCdFlYSm5hVzR0ZEc5d09qQTdJRzFoY21kcGJpMXlhV2RvZERvd095QnRZWEpuYVc0dFltOTBkRzl0T2pBN0lHMWhjbWRwYmkxc1pXWjBPakE3SWlBdlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclQzVjBaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nT1hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlITjBlV3hsUFNKM2FXUjBhRG94TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTVRBd0pUdHRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUF3TzNCaFpHUnBibWN0Y21sbmFIUTZJREU0Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHdZV1JrYVc1bkxXeGxablE2SURFNGNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8zZHZjbVF0WW5KbFlXczZJR0p5WldGckxYZHZjbVE3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Wm05dWRDMXphWHBsT2lBeE1uQjRPMnhwYm1VdGFHVnBaMmgwT2lBeE5UQWxPM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdJajVRYkdWaGMyVWdaRzhnYm05MElISmxjR3g1SUhSdklIUm9hWE1nWlMxdFlXbHNMaUJVYUdVZ2MyVnVaR1Z5SUdWdFlXbHNJR0ZrWkhKbGMzTWdhWE1nYm05MElHMXZibWwwYjNKbFpDNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pSbTl5SUdGdWVTQnhkV1Z6ZEdsdmJpd2djR3hsWVhObElEeGhJR2h5WldZOUltMWhhV3gwYnpwamIyNTBZV04wUUhCc1lYUm1iM0p0Tmk1cGJ5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHQwWlhoMExXUmxZMjl5WVhScGIyNDZJSFZ1WkdWeWJHbHVaVHNpUG5ObGJtUWdkWE1nWVNCdFpYTnpZV2RsUEM5aFBpNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6ZEhKdmJtYytVR3hoZEdadmNtMGdOaUJpZVNCQmJXRnNkRzhnVkdWamFHNXZiRzluYVdWelBDOXpkSEp2Ym1jK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNjS3BKbTVpYzNBN0pIc3VibTkzUDNOMGNtbHVaeTU1ZVhsNWZTWnVZbk53TzBOdmNIbHlhV2RvZEM0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNDhMMlJwZGo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRazhMM1J5UGdvSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1R3aExTMGdMeThnUlU1RUlGUkZUVkJNUVZSRklDMHRQZ29KQ1FrOEwzUmtQZ29KQ1R3dmRISStDZ2s4TDNSaFlteGxQZ29KUEM5alpXNTBaWEkrQ2p3dlltOWtlVDRLUEM5b2RHMXNQZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjUxMjY2fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU5ODgyNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1MDcsXCJyZXZpc2lvbklkXCI6XCJkMWZhY2FkMDlkMWI2MjVkZDA3ZTM2NWIxY2NkMTE1YlwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvVHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkFwcGxpY2F0aW9uXFxcIiBhbmQgVmFsdWU9XFxcInA2X2RlbW9cXFwiXScgLCBjb250ZW50KTtcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcInRhcmdldERhdGFTb3VyY2VOYW1lXCI6bnVsbCxcImRlZmluZWRQYXJhbWV0ZXJzXCI6e30sXCJjYWNoaW5nT3ZlcnJpZGVcIjpmYWxzZSxcImFwcGVuZFRhcmdldERhdGFTb3VyY2VcIjpmYWxzZX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MDd9XX0=", "enabled": false, "version": "0.10.0", "installed": false, "signature": "hC51RvJEqT35PFeY6VdDDc7EiEZGGqshvJCdidPZXYPkHjApL6L+ddV0qL5t8tqE8hzb9aS6Rtt5aPKkgxuZeibkedDvTou+4chv/4xLMdXJlQJESxBik+als34DHQMHcZ1hTpka3OlXhU+exYJ6ZUPBcpzNxXa/NxyK+HkRa60=", "createDate": 1567442840607, "expiryDays": 0, "revisionId": "b15bcc325053308e2795a9760543d44d", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1567774893482, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-beta-1", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1567774893500 -\. - - --- --- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; -\. - - --- --- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box --- - -COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; -\. - - --- --- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.activeroutingorder - ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name); - - --- --- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.completedroutingorder - ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name); - - --- --- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.failedroutingorder - ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name); - - --- --- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.flyway_schema_history - ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank); - - --- --- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.transaction - ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4); - - --- --- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.rawbytes - ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2); - - --- --- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box --- - -ALTER TABLE ONLY p6core.serviceconfig - ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100'); - - --- --- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint)); - - --- --- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); - - --- --- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); - - --- --- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); - - --- --- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); - - --- --- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); - - --- --- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); - - --- --- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); - - --- --- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); - - --- --- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); - - --- --- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success); - - --- --- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); - - --- --- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); - - --- --- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); - - --- --- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); - - --- --- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); - - --- --- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); - - --- --- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); - - --- --- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); - - --- --- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); - - --- --- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); - - --- --- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); - - --- --- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype); - - --- --- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops); - - --- --- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype); - - --- --- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text)); - - --- --- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box --- - -CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text)); - - --- --- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres --- - -GRANT ALL ON DATABASE b2box TO b2box; - - --- --- PostgreSQL database dump complete --- - --- --- PostgreSQL database dump --- - --- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) --- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - -DROP DATABASE postgres; --- --- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres --- - -CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; - - -ALTER DATABASE postgres OWNER TO postgres; - -\connect postgres - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres --- - -COMMENT ON DATABASE postgres IS 'default administrative connection database'; - - --- --- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres --- - -CREATE SCHEMA b2head; - - -ALTER SCHEMA b2head OWNER TO postgres; - --- --- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: --- - -CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; - - --- --- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; - - --- --- PostgreSQL database dump complete --- - --- --- PostgreSQL database cluster dump complete --- - +-- +-- PostgreSQL database cluster dump +-- + +SET default_transaction_read_only = off; + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +-- +-- Drop databases (except postgres and template1) +-- + +DROP DATABASE b2box; + + + + +-- +-- Drop roles +-- + +DROP ROLE b2box; +DROP ROLE postgres; + + +-- +-- Roles +-- + +CREATE ROLE b2box; +ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4'; +CREATE ROLE postgres; +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS; + + + + + + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) +-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1'; +DROP DATABASE template1; +-- +-- Name: template1; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE template1 OWNER TO postgres; + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE template1 IS 'default template for new databases'; + + +-- +-- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres +-- + +ALTER DATABASE template1 IS_TEMPLATE = true; + + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; +GRANT CONNECT ON DATABASE template1 TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) +-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE b2box OWNER TO postgres; + +\connect b2box + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box +-- + +CREATE SCHEMA p6core; + + +ALTER SCHEMA p6core OWNER TO b2box; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box +-- + +CREATE TYPE p6core.itempartitiontype AS ENUM ( + 'LOG', + 'TABLE_DATA', + 'TRANSACTION' +); + + +ALTER TYPE p6core.itempartitiontype OWNER TO b2box; + +-- +-- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box +-- + +CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text + LANGUAGE sql IMMUTABLE STRICT + AS $$ + + + select array_to_string (texts, sep) + + + $$; + + +ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.activeroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.activeroutingorder OWNER TO b2box; + +-- +-- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.completedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.completedroutingorder OWNER TO b2box; + +-- +-- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.failedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.failedroutingorder OWNER TO b2box; + +-- +-- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.flyway_schema_history ( + installed_rank integer NOT NULL, + version character varying(50), + description character varying(200) NOT NULL, + type character varying(20) NOT NULL, + script character varying(1000) NOT NULL, + checksum integer, + installed_by character varying(100) NOT NULL, + installed_on timestamp without time zone DEFAULT now() NOT NULL, + execution_time integer NOT NULL, + success boolean NOT NULL +); + + +ALTER TABLE p6core.flyway_schema_history OWNER TO b2box; + +-- +-- Name: item; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.item ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +) +PARTITION BY LIST (datapartition); + + +ALTER TABLE p6core.item OWNER TO b2box; + +-- +-- Name: log; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.log PARTITION OF p6core.item +FOR VALUES IN ('LOG'); + + +ALTER TABLE p6core.log OWNER TO b2box; + +-- +-- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.rawbytes ( + id1 character varying(96) NOT NULL, + id2 character varying(96) NOT NULL, + content bytea NOT NULL, + inserttime bigint +); + + +ALTER TABLE p6core.rawbytes OWNER TO b2box; + +-- +-- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.serviceconfig ( + id1 character varying(512) NOT NULL, + id2 character varying(256) NOT NULL, + id3 character varying(256) NOT NULL, + content jsonb NOT NULL, + bytes bytea, + inserttime bigint +); + + +ALTER TABLE p6core.serviceconfig OWNER TO b2box; + +-- +-- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.table_data PARTITION OF p6core.item +FOR VALUES IN ('TABLE_DATA'); + + +ALTER TABLE p6core.table_data OWNER TO b2box; + +-- +-- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.transaction PARTITION OF p6core.item +FOR VALUES IN ('TRANSACTION'); + + +ALTER TABLE p6core.transaction OWNER TO b2box; + +-- +-- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.activeroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.completedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.failedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin; +1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t +2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t +3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t +4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t +5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t +6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t +7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t +8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t +9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t +10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t +11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t +12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t +13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t +14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t +15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t +16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t +17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-19 14:45:47.956626 67 t +18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql -1818743481 b2box 2019-09-19 14:45:48.067897 117 t +19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-19 14:45:48.204782 13 t +20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-19 14:45:48.230868 147 t +21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql 1970508059 b2box 2019-09-19 14:45:48.395351 9 t +\. + + +-- +-- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin; +Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "enabled": true, "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 +Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "enabled": true, "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 +_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "enabled": false, "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 +WorkflowTask datamodels {"name": "WorkflowTask", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "05d747b40331bffd64ce9f7aa64c7692", "contentMode": "READ", "description": {"EN": "WorkflowTask Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1562691470454} \N 1562691470561 +2c101aa8e2234e1baf8bbd278ce3732d p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "2c101aa8e2234e1baf8bbd278ce3732d", "appKey": "p6_demo", "status": "6.0.0-beta-1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi52aWV3cyIsIm5hbWUiOiJXb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldvcmtmbG93IFRhc2tzIGZvciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NzgsXCJyZXZpc2lvbklkXCI6XCIyMGY2MTFlYjg2MzUzYjdhNzk3ZGQ2Y2Y3NmQ2ZGExM1wiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1Nzh9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDAzLFwicmV2aXNpb25JZFwiOlwiZjA1MDM1NzA2NGJiMmVmYWU4NTQ3ZmVmZGYzYmY2ZDRcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDAzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTc3ODk3OTgsXCJyZXZpc2lvbklkXCI6XCJmZmM2MTA4MTEzNDU2M2RkODMyZWEwMTI0NTdjODhmNVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIHJvdXRlSWQgPSBcXFwicDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRc1xcXCJcXG5cXG50cnkge1xcbiAgICBwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgICAgIGZyb20oXFxcInRpbWVyOi8vbXlUaW1lcj9wZXJpb2Q9MTBtXFxcIilcXG4gICAgICAgICAgICAgICAgLnRvKCdwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5DcmVhdGVSRlFUcmFuc2FjdGlvbicpXFxuICAgICAgICAgICAgICAgIC5yb3V0ZUlkKHJvdXRlSWQpXFxuICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbihyb3V0ZUlkKVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBwNi51dGlscy5wYXVzZSgpXFxufSBmaW5hbGx5IHtcXG4gIHA2LmNhbWVsLmRlc3Ryb3lSb3V0ZShyb3V0ZUlkKVxcbn1cXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTc3ODk3OTh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDI4LFwicmV2aXNpb25JZFwiOlwiMzlkYTE5NmNkNGNkNTM4YjJiMmU1ZTE1MWU0ZGQ4ZTZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcdGRlZiB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUkZRcz9jcm9uPTArMSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJGUXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UkZRcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUXVvdGVzP2Nyb249MCsyKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UXVvdGVzIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19BY2NlcHRlZD9jcm9uPTArMysqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRBY2NlcHRlZFBPcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfUmVqZWN0ZWQ/Y3Jvbj0wKzQrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UmVqZWN0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X0ZhaWxlZFJvdXRpbmdPcmRlcnM/Y3Jvbj0wKzAvMTUrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMgY291bnRlclxcXCIpXFxuXFx0fVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDI4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5ODQyMjU0OCxcInJldmlzaW9uSWRcIjpcIjc1YTUxMTc2Mjc1MWI5N2U0ODUzYzA0Zjc2MDZlMDRhXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgZXRoQ2xpZW50VVJMID0gcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdjb250cmFjdEFkZHJlc3MnKVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oXFxcIndlYjNqOi8vXFxcIiArIGV0aENsaWVudFVSTCArIFxcXCI/YWRkcmVzcz1cXFwiICsgY29udHJhY3RBZGRyZXNzICsgXFxcIiZvcGVyYXRpb249RVRIX0xPR19GTE9XQUJMRVxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5ODQyMjU0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc4OTkzNzUzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZCgncDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXMnKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzgwN31dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJBcHBDb25maWciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJBcHBDb25maWdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQXBwbGljYXRpb24gQ29uZmlndXJhdGlvbiBUYWJsZVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUzMyxcInJldmlzaW9uSWRcIjpcImY1OTkzMWM0M2Q3YjlkNTc5NzE3ODIxM2FiOTQxMDVkXCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwia2V5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInZhbHVlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInR5cGVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH1dLFwia2V5c1wiOltcImtleVwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MzN9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgyMTksXCJyZXZpc2lvbklkXCI6XCIyOWZmMTM4Y2MzYTliOTk3ZjE1ZDUwMWUzZjljZTc5NFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjE5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRhcHQgV29ya2Zsb3cgU3RlcHMgb24gdGhlIGZseSBsZXZlcmFnaW5nIGEgV29ya2Zsb3cgU3RlcCB1c2VkIGFzIHRlbXBsYXRlIChvcHRpb25hbClcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4MjEsXCJyZXZpc2lvbklkXCI6XCIwOGQyOWRhZWJhN2E0NmNiMjhiYTAwZWZlZDNmYTc0ZVwiLFwibWFpblNjcmlwdFwiOlwicDYucGlwZWxpbmUudmFyaWFibGVzKCkuZWFjaCgpIHsgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIH1cXG5cXG5kZWYgd29ya2Zsb3dTdGVwID0gcDYucGlwZWxpbmUuZ2V0WG1sICd0ZW1wbGF0ZVN0ZXBYbWwnXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy9kZWYgdHJhbnNhY3Rpb25JbmZvID0gcGlwZWxpbmUuZ2V0WG1sICdfREVGQVVMVF8nXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogIEFERCBPTkUgUEFSQU1FVEVSIEJZIExJTkUgVE8gQUNUSU9OICAgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG5kZWYgbXlBY3Rpb24gPSB3b3JrZmxvd1N0ZXAuQWN0aW9ucy5BY3Rpb24uZmluZHtpdC5AaWQgPSAnc2VuZCd9XFxuXFxuaW50IG5iTGluZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnTGluZSBpdGVtcyd9LlZhbHVlLnRleHQoKSlcXG5cXG5kZWYgc3RlcFhtbCA9IGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUoIHdvcmtmbG93U3RlcCApXFxuXFxucDYucGlwZWxpbmUucHV0ICdzdGVwWG1sJywgc3RlcFhtbFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4MjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJJbml0aWFsaXplQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJbml0aWFsaXplQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVwbG95IEJ1bmRsZWQgUmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIFRhYmxlc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTY3OSxcInJldmlzaW9uSWRcIjpcIjc5MDY0ZDkwMmQyZjg3YTVkODE2NjQ4ZmZiNzM2Zjk5XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai50eC5yZXNwb25zZS5Qb2xsaW5nVHJhbnNhY3Rpb25SZWNlaXB0UHJvY2Vzc29yXFxuXFxuXFxuLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnTG9hZGVkIGJ1bmRsZWQgcmVzb3VyY2VzJ1xcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcblN0cmluZyBQNl9UTVAgPSBTeXN0ZW0uZ2V0ZW52KCdCMkJPWF9UTVAnKVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6IFxcXCJmaWxlOi8vLyRQNl9UTVAvcDZfZGVtb19pdGVtcy5jc3ZcXFwiIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDM5OTM1Njc5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODkxMjg0NCxcInJldmlzaW9uSWRcIjpcIjRmMzA5MjhhYjA2YTRhYzhhNWZjNWU0MjA4MjczYzhkXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMDg5MTI4NDR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSZWNlaXZlUkZRVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSZWNlaXZlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYW4gUkZRIChjcmVhdGlvbiBvZiB0aGUgUkZRIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbeKApikgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODIzMixcInJldmlzaW9uSWRcIjpcImQ1YmJhYjk4ZGMxMDljYmIxY2M2Y2FmNjZmNzIwYzM0XCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbi8vIFRoaXMgc2NyaXB0IHJlYWRzIHRoZSBpbmNvbWluZyBSRlEsIHBhcnNlcyBpdHMgY29udGVudCBhbmQgd3JpdGVzIHRoZSB0cmFuc2FjdGlvbiBpbiBQNiBkYXRhYmFzZSB1c2luZyBpdHMgaW50ZXJuYWwgVHJhbnNhY3Rpb25JbmZvIG1vZGVsIChjaGVjayB0aGUgRGF0YSBNb2RlbHMgbWVudSBmb3IgbW9yZSBpbmZvKVxcbmRlZiByZnFDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIGFwcGxpY2F0aW9uSWQgPSAnRGVtb0FwcCdcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG48L1RyYW5zYWN0aW9uSW5mbz5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjMyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0NTQsXCJyZXZpc2lvbklkXCI6XCI5MWY3MzM2ZTk2ZjkyOTI5NDg0OWI0YWVjZGJhNjQxYlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODQ1NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTYxMixcInJldmlzaW9uSWRcIjpcImRhOTliZGFjMjM3YWRkOTMyYWM2ZTc1MmI1YjBiYmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzQzOTkzNTYxMn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NzI0Nzg4OSxcInJldmlzaW9uSWRcIjpcImI2ZjZmMzYzOTJhNTNiZjUzNDg0OWY0NDYwY2Q5NWQwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0Nzg4OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MzEwLFwicmV2aXNpb25JZFwiOlwiNjM2M2MyY2U0N2NkZGY2NDI1MzdkMTc0MzQ2MWFjOTBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODMxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ2NjIsXCJyZXZpc2lvbklkXCI6XCJmNTI4NjA2ODQ1MjEyZDJjM2U5OGJjNDc1YjZiMTY4MlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImNvbXBpbGVkQ29udGVudFwiOm51bGwsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ2NjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDI2Njc0MTUsXCJyZXZpc2lvbklkXCI6XCJmNDc2NGE1ZWM1Yjg1MTk0OTk3ZjAyMTZkY2RjNTIxMFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQyNjY3NDE1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDEwMDM0NzgzLFwicmV2aXNpb25JZFwiOlwiMDg4ZjYyZGMwMWEzODMwZTUwMWUxNmM0ZTIzZjhjZWZcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0NzgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc5MDYsXCJyZXZpc2lvbklkXCI6XCI3YTE4NDhlZDZkMGIzMGNiYTRlM2M5NjA2NTZmZTJmMFwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcF9EZXYnXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHF1b3RlLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHF1b3RlLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC50ZXh0KClcXG5kZWYgdG90YWxDdXJyZW5jeSA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKVxcblxcbmRlZiBxdW90ZUlkID0gcXVvdGUuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcXVvdGUuTm90ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHF1b3RlLlF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdQdXJjaGFzZU9yZGVyJ1xcbmRlZiBwdXJjaGFzZU9yZGVySWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1F1b3RlL1xcXCIgKyBxdW90ZUlkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9QdXJjaGFzZU9yZGVyL1xcXCIgKyBwdXJjaGFzZU9yZGVySWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgb3JkZXJMaW5lcyA9ICcnXFxuXFxucXVvdGUuUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+XFxuXFxuICAgIG9yZGVyTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpPcmRlckxpbmU+XFxuICAgIDxjYmM6Tm90ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTm90ZS50ZXh0KCkpfTwvY2JjOk5vdGU+XFxuICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfTwvY2JjOlF1YW50aXR5PlxcbiAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC50ZXh0KCkpfTwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+XFxuICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC50ZXh0KCkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkudGV4dCgpKX08L2NiYzpCYXNlUXVhbnRpdHk+XFxuICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5EZXNjcmlwdGlvbi50ZXh0KCkpfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOkl0ZW0+XFxuICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgPC9jYWM6T3JkZXJMaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuXFxuZGVmIG9yZGVyQ29udGVudCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPE9yZGVyIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpPcmRlci0yXFxcIlxcbiAgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiXFxuICB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMTwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPnVybjp3d3cuY2VuYmlpLmV1OnRyYW5zYWN0aW9uOmJpaWNvcmV0cmRtMDAxOnZlcjEuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCJCSUlcXFwiIHNjaGVtZUlEPVxcXCJQcm9maWxlXFxcIlxcbiAgICA+dXJuOnd3dy5jZW5iaWkuZXU6cHJvZmlsZTpCSUkwMTp2ZXIxLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHB1cmNoYXNlT3JkZXJJZCl9PC9jYmM6SUQ+XFxuICA8Y2JjOklzc3VlRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvY2JjOklzc3VlRGF0ZT5cXG4gICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZT5JbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgd2hvbGUgb3JkZXI8L2NiYzpOb3RlPlxcbiAgPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TRUs8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5cXG4gIDxjYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlByb2plY3QxMjM8L2NiYzpBY2NvdW50aW5nQ29zdENvZGU+XFxuICA8Y2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlF1b3RlSUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlJqZWN0ZWRPcmRlcklEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+TUFGTzwvY2JjOklEPlxcbiAgPC9jYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpDb250cmFjdD5cXG4gICAgPGNiYzpJRD4zNDMyMjwvY2JjOklEPlxcbiAgICA8Y2JjOkNvbnRyYWN0VHlwZT5GcmFtZXdvcmtBZ3JlZW1lbnRJRDEyMzwvY2JjOkNvbnRyYWN0VHlwZT5cXG4gIDwvY2FjOkNvbnRyYWN0PlxcbiAgPGNhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcyMzExMTE1PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcwMDExMTE1PC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MTIzNDU2Nzg5MDEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PlBvQm94MTIzPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5Sw6VkaHVzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT4ybmQgZmxvb3I8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlB1cmNoYXNpbmcgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkpvaG5zc29ucyBCeWdndmFyb3IgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMxMTgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAyMzQ3MjMxMTExPC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlNlbGxlclBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NTQzMjExMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD4zMjE8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkt1bmdzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5zdWl0ZTEyPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjIyPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+U2FsZXMgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMjI4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY3ODMyMTEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAke29yZGVyTGluZXN9XFxuPC9PcmRlcj5cXG5cXG5cXFwiXFxcIlxcXCJcXG5cXG5cXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIG9yZGVyQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwdXJjaGFzZU9yZGVySWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UHVyY2hhc2UgT3JkZXI8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cHVyY2hhc2VPcmRlcklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT4gICAgXFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3OTA2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4NjcsXCJyZXZpc2lvbklkXCI6XCJhZmUwNzhkYzQ3MjEzYzA4YmYxMTJkNjdhZTUyNTM4NFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4Njd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJsb2NrY2hhaW5cIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0MTIsXCJyZXZpc2lvbklkXCI6XCI2MmExZjI0NmMyZmZlZDU0ZmFiOGVkOGJjOGVkMjhjYlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiB0b3BpY3MgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ1RvcGljcycpLnNwbGl0KCcsJylcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ0RhdGEnKVxcblxcbmlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUkZRUmVjZWl2ZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIHA2LnBpcGVsaW5lLnB1dChcXFwidWJsXFxcIiwgdWJsKVxcbiAgICBwNi5jb250cm9sLmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0MTJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MTQ0NjI5MixcInJldmlzaW9uSWRcIjpcIjA3MzAxYjEwZGVhM2U4NzE0NWE4MmFiNWUwNjA2MGEwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQxNDQ2MjkyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ5MDIsXCJyZXZpc2lvbklkXCI6XCIxNTBkMGU3MDhhOGRlNTc1YTc1ZTQzNTE5OGRmMGU3MlwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0OTAyfV0sInBsYXRmb3JtNi5jb3VudGVycyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgUkZRcyB3aXRoIFxcXCJSZWNlaXZlZFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDAwNjAwNTYsXCJyZXZpc2lvbklkXCI6XCI3YTYwYTAyZjViYzFiOWY4ZmVlNWY0YjZjMzJiYjMzZVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2NzQ0MDA2MDA1NixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDAwNjAwNTZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTcyMDA1MSxcInJldmlzaW9uSWRcIjpcImQxMWE1YzM1YzA4ODMzMjQ4OTRlOGRjOWM4MzRjNTNmXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDExNzIwMDUwLFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTE3MjAwNTF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgRmFpbGVkIFJvdXRpbmcgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MjcwMDEyMSxcInJldmlzaW9uSWRcIjpcImI1YjVlYWUyZmNmM2QwNGMzMTJhOGZkNjg5NDBmYTI3XCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3NDQyNzAwMTIwLFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDI3MDAxMjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODI0MDAzNSxcInJldmlzaW9uSWRcIjpcIjBkMjYwM2ZkYTY2Mjc4MzQ3ZWY1Y2ViN2JhMjA3ZjAzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDA4MjQwMDM1LFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlB1cmNoYXNlIE9yZGVyXFxcIiBdW0Z1bmN0aW9uYWxTdGF0dXNDb2RlID0gXFxcIlJlamVjdGVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91c0BhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAwODI0MDAzNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDA4MTgwMDkwLFwicmV2aXNpb25JZFwiOlwiMjc5YmM0YTMyZjZmYThkNDA2YWZkZTRkODU0M2U0ZWZcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjcwMDgxODAwOTAsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDA4MTgwMDkwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTY1LFwicmV2aXNpb25JZFwiOlwiMzFhYmNjZWUwYmE1Zjc0NWY3NjlhMjE5NDNiMmE2YTRcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTY1fV0sInBsYXRmb3JtNi5kYXRhbW9kZWxzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5kYXRhbW9kZWxzIiwibmFtZSI6IlRyYW5zYWN0aW9uSW5mbyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uSW5mb1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbkluZm8gZGF0YW1vZGVsXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTM0LFwicmV2aXNpb25JZFwiOlwiNzMyZWFjNmEwMzViOTdjZDgzNjViY2U4Y2I3YmU3NWRcIixcInNjaGVtYVwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNkOnNjaGVtYSB4bWxuczp4c2Q9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXFxcIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD1cXFwidW5xdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgYmxvY2tEZWZhdWx0PVxcXCJcXFwiXFxuICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PVxcXCJxdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgZmluYWxEZWZhdWx0PVxcXCJcXFwiPlxcbiAgIDx4c2Q6ZWxlbWVudCBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDcmVhdGlvbkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZVN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXRTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU2VuZGVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkZpbmFsUmVjaXBpZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zZmVyUHJvdG9jb2xcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGVsaXZlcmVkVmlhXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRzXFxcIi8+XFxuXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbGFnc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIk9yZ1BhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3Vlc1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXVkaXRUcmFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlJlY29yZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIldvcmtmbG93XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGSW5zdGFuY2VzXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgPHhzZDp1bmlxdWUgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIj5cXG4gICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPVxcXCIuXFxcIi8+XFxuICAgICAgICAgPHhzZDpmaWVsZCB4cGF0aD1cXFwiSWRcXFwiLz5cXG4gICAgICA8L3hzZDp1bmlxdWU+XFxuICAgPC94c2Q6ZWxlbWVudD5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUaHJlYWRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQnVzaW5lc3NEb2NOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VDb250ZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIktleVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJMZXZlbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlBhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkxpc3RPZlZhbHVlc1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsb3dOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkFjdGl2ZUluc3RhbmNlSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJbnN0YW5jZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkluc3RhbmNlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJsYXN0VXNlckVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJmbGlua1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJGTElOS1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJzdGVwXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGU3RlcFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGU3RlcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGVwSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFjdGlvbmVkQnlFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhc3NpZ25lZFRvTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZXNcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIiB0eXBlPVxcXCJXRkFzc2lnbmVlc1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJwYXJhbWV0ZXJcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkZMSU5LXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInZpZXdcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJ0eXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkFzc2lnbmVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiPlxcbiAgICAgICAgIDx4c2Q6YW55IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lc3BhY2U9XFxcIiMjYW55XFxcIiBwcm9jZXNzQ29udGVudHM9XFxcImxheFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbjwveHNkOnNjaGVtYT5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5MzR9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTMxMzY4MyxcInJldmlzaW9uSWRcIjpcImYyYTBlYzk2ZDFjZmZkODdiMWQxMjA0ZmFmZWRlZDcxXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtmbG93VGFza0VuaGFuY2VyXFxcIi8+XFxuICAgIFxcbiAgICA8QXNzaWduZWUgbmFtZT1cXFwiRGVtb0FwcFxcXCIgcGF0aD1cXFwiLyR7SU5TVEFOQ0VfSUR9XFxcIiB0eXBlPVxcXCJVTklUXFxcIiBzY29wZT1cXFwiKj0qXFxcIj5cXG4gICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICA8RU4+U3VwcGxpZXI8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Gb3Vybmlzc2V1cjwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L0Fzc2lnbmVlPlxcbiAgICBcXG5cXHQ8U3RhdHVzTGFiZWxzPlxcblxcdCAgICA8TGFiZWwgbmFtZT1cXFwiUmVjZWl2ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVjZWl2ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZcOndWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJDcmVhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkNyZWF0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5DcsOpw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVwcmVjYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZXByZWNhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+QW5udWzDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJQcm92aWRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5RdW90ZSBwcm92aWRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlF1b3RhdGlvbiBmb3VybmllPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVjbGluZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVjbGluZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Ew6ljbGluw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJzZW5kXFxcIiBzdGF0dXM9XFxcIlByb3ZpZGVkXFxcIiB0eXBlPVxcXCJGT1JNXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uUHJvdmlkZVF1b3RlXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPlByb3ZpZGUgUXVvdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Rm91cm5pciBRdW90YXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuXFxuICAgICAgICAgICAgPEZvcm1HZW5lcmF0b3I+cDZfZGVtby5XRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb248L0Zvcm1HZW5lcmF0b3I+XFxuICAgICAgICAgICBcXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnJmcTwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPnJmcTwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+cmZxPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5saW5lczwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPmxpbmVzPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5saW5lczwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJkZXByZWNhdGVcXFwiIHN0YXR1cz1cXFwiRGVjbGluZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLXRpbWVzLGJ0bjpidG4tZGFuZ2VyLGNvbG9yOmRhbmdlcjwvU3R5bGU+IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkRlY2xpbmU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RMOpY2xpbmVyIHF1b3QuPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuXFx0ICAgICAgICAgICAgPE5hbWU+cmVhc29uPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+UmVhc29uPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5Nb3RpZjwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUQVJFQTwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImV4cGlyZVxcXCIgc3RhdHVzPVxcXCJFWFBJUkVEXFxcIiB0eXBlPVxcXCJFWFBJUkVcXFwiIGRpc3BsYXk9XFxcImZhbHNlXFxcIj5cXG5cXHRcXHRcXHQ8RXhwaXJ5IGVycm9yPVxcXCJmYWxzZVxcXCIvPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgIDwvQWN0aW9ucz5cXG4gICAgXFxuPC9Xb3JrZmxvd1N0ZXA+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDExMzEzNjgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUHVyY2hhc2VPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVB1cmNoYXNlT3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWNjZXB0IG9yIFJlamVjdCB0aGUgT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTEzMDI0MTIsXCJyZXZpc2lvbklkXCI6XCI4NWIzZmI0YjEzNDk1NGMxYzI2YjU4YjNjMTExNzkwZVwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5QdXJjaGFzZU9yZGVyIC0gQWNjZXB0IG9yIHJlamVjdDwvRU4+XFxuICAgICAgICA8RlI+Q29tbWFuZGUgLSBBY2NlcHRlciBvdSByZWZ1c2VyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz50cnVlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke0IyQk9YX0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAxMTMwMjQxMn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTgyMzc0NzYxLFwicmV2aXNpb25JZFwiOlwiYzYxMzI0YmI4ZGFiZTExMjFiZGU2MjczYjBiYzgwNzNcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUU2YTJrNExsNHRkbkFBQUFCRUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56ckVPZ2pBUUJ1Q2RoSGZvQ3h5aFlCQzdpUzZhTUVrYzNKcjJqQmRwYWNwSjR0c0xJMkZ4L2UrL0wzK3JQVDF4WkxoakhHbndTc2dzVDVPTEN6MDY5S3g1RHFFajdsRUppMjRBSFFLTVRrY0dNM2lPMnZDbXZyWnVBUTA5eWZ4SE5SL3FMVnp0RzVhL2hhZzMvbG56VEJTNVBFQmVRVkYxY3E5a3JZcnlrU2FuaVBQVlF2TlZvdFVUZW5HTTVrVVRSbEZtdSsyZTlkWTArUUZRU3dNRUNnQUFDQUFBVHByYVRnQUFBQUFBQUFBQUFBQUFBQWtBQUFCTlJWUkJMVWxPUmk5UVN3TUVDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUFNQUFBQnBieTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQTBBQUFCcGJ5OXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVNBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzREJBb0FBQWdBQUUyYTJrNEFBQUFBQUFBQUFBQUFBQUFWQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQWtBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzREJBb0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUE4QUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzREJCUUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpRdVkyeGhjM09WVWwxUEUwRVVQVk9XcmkyclZGUVVVZU1ETVMyWURrSGtCZEtYUmhKTjFRalk5OW5kMnpKa08xTm5aekg4STE1OU1DUTgrQVA0VWNTN0N3L0dHQU9aek55UE9mZk9PWk43Y1huK0M4QW1YalF3ZzhVbUFqd084U1RFa2tEZEgrcDhaVjFnYmFDdG5HYktqNnliYk1tVUpsYm1pZHlqYndYbGZ0ZTZMNFgxeW10cjhtMHUyOUZHKzU1QXQzMkx1czVRSU9qYmxBVG1COXJRcDJJU2t6dFFjY2FaaFlGTlZEWlVUcGZ4ZFRJbzZRbEU3NDBoMTg5VW5oT0gzWnUvdWJLeHlYUWIrM3BzbEM4Y3Qvd3dzRzRzdjFQODVraXFXTXVEa3ludDBZZ2NtWVIyL3JwTUZmZGhRQzdIeEF5VXAxUisxY1p2dk4zYTduSGo1cjR0WEVLN3VpUzc5QzhDM1NOMXJGanZPNU5rTnRkbS9KSDhvVTFEUEkyd2pHY1JabEdQRU9LNXdPdmJxQkpZL284T2djNk5td25NbWRoOUhwV1o4bmRmdFR0Ly9NTFVXVzhUbThuRU91TDZDWVA2S3N0WS9FeTdNOFJMSHFtQXAwdTBXcVdVMHVNZDRnN2JCbnM5MUhnQnpkVzFueENyWjZqOTRLaUdKcC8xQ251S09UNFhyMUNJY0Erb3ZObnFQc0I4aFcvaGZtVVg4SUJ0Z0lkNGhMc1Zqb2xVRmZnTlVFc0RCQlFBQUFnSUFFMmEyazZ3NEpEeG13RUFBT0FDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UZ3VZMnhoYzNPVlVsRnJFMEVRL2phOTVwcDRtbGkxV3F2U2h6NGtyV1FWUlFvdGVUQllFS0pnVS9QU3A4MWxrbTY1N01TOVBjV2Y1WU1JUHZnRC9GSGkzT21EaUVqTHNqc3pPOTgzTXgvTTl4OWZ2d0Y0aWdjTnJHQ2ppUWkzWTl5SnNhbFFEMmMyMzNta3NEZTBySmVaQ1RQMmkyZDZTZ3ZXZWFxUDZWMUJlVGhpLzZiZ1lJSmxseDhJN2RBNkcvb0t2YzRsZU4yeFFqVGdLU20waHRiUjYySXhJWDlpSnBuOHJBODVOZG5ZZUZ2R3Z6K2pjanlGNUtWejVBZVp5WE9Tc0hmeG5qdVA5MlhjeHNqT25RbUZsNUtESWZ1NS9rQ1RKK2ZhVEt3KytiaWtZNXFSSjVmUzRWL0pxWkU2QXNqMTJ6RGJId1Z2M2Z5Z0x4V2JJeTU4U2tlMm5ITHpYNTE3NSthOUVhRXZYSnB4THJ4WEZNNTRHdU51Z2kzY1M3Q0tlb0lZOXhVZVhrYU93dFovQkNoMEwxeE1ZVzFPb1l5RjF1bWNQdS8rb1g3cE9YREttVTdaazlBWGdocVlMQlB0SzUzdUdOdXlTcEZzbFdxM1N5V2xKemZHbXRpR2VIM1U1QUROM2IzUFVMdGZVUHNrVVExTmVlc1ZsbkZGM28xZktDUzRCbFRlYXBXUDBLcndiVnl2N0RwdWlJMXdFN2R3dGNMSklCVURQd0ZRU3dNRUZBQUFDQWdBVFpyYVRzU0M1K0JDQVFBQUdnSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpsVkZMUzhOQUVKN3RLMjJOVnVzRHhLc0hxK2dLaWhSYWVyQllFS0pnVzN2ZkpOTjJTN3BiTnh2Rm4rVko4T0FQOEVlSmsraEpSSFJnWHQvTWZEdkR2cjIvdkFMQUtXeFZJUTkxQjlZZDJHQlFha3NsYllkQmZxOHhZbERvNmhBWjFEeXA4RHFaKzJpR3dvOElxWHM2RU5GSUdKbm1YMkRCVG1YTXdMMVVDazAzRW5HTWxCNTZVdk5GSk94WW0va1pEM0d1ZVJ6d1B0NGxHTnVlTmplSnRzSktyZUxkWm90QlpTQW5TdGpFRUdQWDAyYkNIOUEvbVhIaFN6NThYR0FmeDJoUUJkaitWZ3dGMFZCRHpHL3R1RG13UnFwSnEwT00xWUZPVElBOW1TNjUvZFBEUnpOeEwrak9DeFZFT3FhNUs3UlRIVHF3NlVJQmlnd08vbkVEZzUxZnRtYlErRE1YSEVPT2ZpY1ZSa3Fia0M5UnhNbW5TSEgvR2RnVEJUbHd5Sll5OEJ6S1pOM1BCcWpBVWpicVpsM0xzSkw1R3F4bTZCclphcWFNMEZUS0gxQkxBd1FVQUFBSUNBQk5tdHBPYW14THF6UUNBQUFhQkFBQUpBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjNDFTNzAvVFVCUTliK3ZXcnBUQktxSWdJcitVYlNBRm5IN1pRaUFJQ2NrQ1FuSEpZdnpRZFk5WjByV21QL1ozeVVqRWFEUjg5bzh5M2xjWEE1R0FyOG05T2UrZWUrNTVyKy9ucjY4L0FGUlF5VUhDb29vaVNqTEdaSlJWNUxFa3dyS0NFWldLeTRMeFhFRkI1QlVGdXNpR2pGVUc1WWpiM09ueE5zTk0zZkdOajY0Vm5maEI5NVhSNWwzZkNHM2phUGZRakt3b0RxdkVmczF0MS9FRWUvZ3c5aVArSnZCN1RsdGdlYUd4VlgrN1l6TE12cnRiS051ejNKaUhEUFBGMG4vUXBXMi96UmxHNmpSN1ArNjJlSEJzdFZ6YWtST2RneE9HU3JGK2F2VXN3N1c4am1GR2dlTjFxcVc3bGZXNmIxdHV3d29jSVRoUWxUeXJ5MFh0SDBWeVhuTThKOXBnR0w5aDRGNnBRZDNSQjRkT2xqT2Rqa2RUQWxKS0YwVkJxWW5MUzVyWHIvVHVlSEczZHBmVERScXRtbjRjMkh6WEVSNXp4enlNVm9TS2hudml0NDlwV01NNncvVHRTaG9tOEVMRE5KNW9HTUdvaG9JSU9rWVo4dGM5TVdSczEvZG8xbGl4ZE1YdlFldVUyeEg1ZVhuMUJyWmRLd3lyTi8yRDY2clZ6VlY2ZkhsNnVkTG1oSEFBVUM0TXNpN3k2S1E0a1dBZ2gvc1lCOE1EUW5PVXhWTDdZSitSdWtUNkV5R0doeFN6U1cyZitCT1lIUEFyU0NXN3FpNlZ2eUJ6Q1Vud1U5ZjRqeWhxZjFpWXd1T2tUbGREVVNpc0lVMGZJSmVYcGk2UVBidWxYY2FNc0k3WmhETUhCZk9KWVNIem5nNGkxdFkzU0UxZFRsOUFPVWN1QWFxVWdLRUVhSmtFREdlL0UwcjM2UVUxcFQ2R3pHYW1qMkh6SE96czczbFZHZ0ljWUpGTXBBWkRGL0EweWM5K0ExQkxBd1FVQUFBSUNBQk5tdHBPZ3dUMmhxTUJBQURqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTFMbU5zWVhOemxWTEJiaE14RUgxT3Q5a21MRFFVV2lnRnhLR0hwRVV4Q0ZwVmFwVURFUkZJQWFscHlRVUp5ZG1kYmwxdDdOVHJCZkZaSEJCU0QvMkFmbFRGN01JQklZUmFXZmJNZU42TTM3TjljWGwyRHVBbEhqY3doNVVtQXR3TGNUL0Vxa0RkSCt0OC9abkE1bEJiT2N1VVA3SnV1aTBUbWxxWngzSkVwd1hsZm1EZGZtRzk4dHFhZkpmTDlyVFJ2aWZRYlYranJqTVdDUG8ySVlIRm9UYjB2cGhPeUIycVNjWTdTME1icTJ5c25DN2ozNXRCU1U4Z2Vtc011WDZtOHB3NDdGNzl6UFhuVzB5M2NhQlRvM3podU9XYm9YV3AvRUtURnlkU1RiUTgvRHFqRVIyUkl4UFQzbC9KUkhFZkJ1UXlKV2FnUENYeWd6WitaN2ZIYlpzSHRuQXhEWFJKZGZWZngzZFAxR2ZGYWwrYk9MTzVOdWs3OHNjMkNmRWd3aG9lUnBoSFBVS0lSd0pQcjZOSllPMC9LZ1E2VjI3R2I1bVNIdzMyQmRydGo2ODZmMXpBekZsdlk1dkoyRHJpNHFuMTFGZFp4c3JuMnAweG52QnZDdmhqaVZhcjFGRjZQRU1zc0cydzEwT05COURjMlB3T3NmRUR0VzhjMWREa3RWNWhQK0VHcnl1L1VJaHdDNmk4K1NvZllMSEN0M0M3c2t1NHd6YkFYU3pqWm9WaklsVUZmZ0pRU3dNRUZBQUFDQWdBVFpyYVRzL0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUUyYTJrN0ZrczQ1b3dFQUFPWUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpNdVkyeGhjM09WVWwxUEUwRVVQVk9XcnEyckZGQVVVZU1ESVMyWWpnSGxCZEtYeGlhYXFxRmczMmQzYjh1UTdVeVpuZFg0Yy93SlBoZ1NIdndCL2lqajNkVUhZNHlCVE9aK3pKeDc1NXliK2Y3ajhodUE1M2pjd0FMV21naHdMOFQ5RU9zQ2RYK3E4ODFuQWp0RGJlVThVMzVpM1d4ZnBqU3pNay9raU00THl2M0F1cVBDZXVXMU5ma0JseDFxbzMxUG9OdStSbDFuTEJEMGJVb0NTME50NkcweGk4bWRxRGpqazVXaFRWUTJWazZYK2UvRG9LUW5FTDB5aGx3L1UzbE9uSGF2L3VibTdoN1RiUnpycVZHK2NOenk5ZEM2cWZ4SThkNlpWTEdXSjUvbU5LSUpPVElKSGY1MW1TcnV3NEJjVG9rWktFK3BmSytOMzMyeGY5RGp4czFqVzdpRUJyb2t1LzR2QXQwejlVR3gzcGNteVd5dXpmUU4rVk9iaG5nUVlRTVBJeXlpSGlIRUk0R24xMUVsc1BFZkhRS2RLemZqOFpqWXZadU1Ca2NjYjdVN2Y4eGc3cXkzaWMxa1loMXg5Y3g2NnFzc1kra0w3YzRZVC9oREJmeTNSS3RWQ2lrajNpRnVzRzl3MUVPTkY5RGMzdmtLc1gyQjJoZk9hbWl5clZmWXo3akpkdTBYQ2hGdUExVzBXTjBIV0tyd0xTeFhmZ1dyN0FQY3dWM2NxbkJNcEtyQVQxQkxBd1FVQUFBSUNBQk5tdHBPMkliNzBJRUJBQUNDQWdBQVNBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGSkdVVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjNlZSVFU4VVFSQjl2YnV3c0s3eW9TS29GeE1QNG9FK1NMeG9URnhrRTVLSmhzVnc4ZFF6VTh6MlpxWnI3ZTVaZjVjbkVnNzhBSDZVc1dZZzhRS0pDWmYzcXJvKyt2WHJxejhYbHdEMjhYS0FMcDcxc2RQSGM0VnV5WVhDWHNLKzBMOG9mVGZUYzgrUk15NTF4cDUwUlhIS2VkQ2V3cHhkSUoxdzhVR2hZM09CSHlPRkZSdENUZm5ucUxDVnpNekM2TXJFcVI3WjRzaEZLc2hMZDdkT1M0WE42M0pwWEtGUG9yZXVXYlQ4MFRvYlAwblBtOTFUaGQ0QjU2U3dsbGhIWCtzcUpmL2RwQ1UxdzV5Wjh0UjQyK1EzaDcwNHRVRmhlekkrbmxCR2RrSDU0WUpjbk55SVZSZ2VPVWYrb0RRaGtIUitTU3pyZVduaUdmdnF2YzZwWWgweVBhR2ZOWVU0Wm45Y2N6VFJ5dkRydTVhSzZNRUoxejZqc1cxRTdOdzJ2ZGM4ZFlnaEh2YnhRbUYwLzJzVjF2L1o5eTJkVVNhTzcvNzNYcnhDUi80ZDZFRjh3NUpFWWo3NkxhOWd0ZVVCSHJTc0d1R0NqeVRUYlE0c3ZUMkgraTFCQjJ1Q3k4MmhHbU5kNHVGMUF6YndwSzAvYlhFTGo0VUhVdXRnRzV0WS9RdFFTd01FRkFBQUNBZ0FUWnJhVHFJeTErZElBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTNMbU5zWVhOemxWRkxUd0l4RUo3S1l3RlJGQitKOGVwQk5GcmpBdzhRRGhKSk5LdUpnTnpMN3JDVUxDMTJ1eHAvbGljVEQvNEFmNVJ4ZHZWa2pORko1dlYxK3ZXYjlPMzk1UlVBam1HOUJCbW9PckRpd0NxRGZGTXFhVnNNTXR1MUFZTnNXL3ZJb09KS2hkZnhkSWltTDRZaElWVlhleUljQ0NPVC9ndk0yckdNR0pRdmxFTFREa1VVSWJWN3J0UjhGZ283MG1aYTV6NU9OWTg4M3NXN0dDUGIwZVltMWxaWXFWVzBkZHBnVU96SlFBa2JHMks4ZExVSitBTU9qeVpjRENYdlA4NndpeU0wcUR4c2ZqdjBCZEhRUU1RREpBSENvczl2cGJLSEovVkdpNGhMUFIwYkR6c3kwYnJ4MC92N0UzRXZhTjF6NVlVNmtpcTRRanZXdmdOclpjaENqc0h1UDFaaHNQbUxlQWExUDNQQkFjelJKeVhHeUVrSjVUeFZuSEtDNUhhZWdUMVJNUWNPeFh3S25rR0JZdmx6QUlvd24xNHRwMU1Mc0pqbUNpeWw2RExGVXVxTTBNUUtIMUJMQXdRVUFBQUlDQUJObXRwT0ZGaXBBUkVjQUFCSmFRQUFMd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOejFWd0pnQnhGdWY0cnU5bmVuVXhDV0VnZ2dBbEh3TTNtMkw2bk95U1I3R1lES3lHQmJCSmNFTENucDJjelpET3p6TXlHUkgzS3FZaUFJQ0lpeWlFSXFNaWhrQkFDSXFpbzRJbWllSXYzOWU1TGVlL3ArLy9xNnA2ZWEzY21HVjU0aE8ycXJ1TS92L3JycjU2ZWVlNnZqMzhPQUhUMnB4aTBNWmt1aXNUVVRxYkY0RmFtMDhXZ2kwbVhoTVNzVHZpS3hHeUpMWTlCbkowY1l5dllTb210a3RnYllqQ2JuU0t4MVRIb3BySS9Cb2V6VTJMUXhRWWt0a1ppZ3pFNGtxMk53UkhzMUU3NGxzUk9pOEV4Tkc0b0J2T3BmR01NanFYeTlCZ2NUK1c2R0N5azhvd1luTVRXZHNJTEVsc2ZnMFZzUTR5ZHljNGlPVGQyd3ZjbE5oeURaV3hUSi95b0UzNHFzYzB4VUduV0ZocHdkaWU4TExFM3hTREJUdW1FWDBoc0pBYkxxZmVjTHV3OWw0YThXV0xueldEbnN3dGk4QWIyRnFvNU0xaVN1WFJKU2N5VFdEb0dhOWxvREFiWjFpNnNaYWgySVEzY05nTm1zREVKbnFmbTdYVEowaVZIbE1hSndVVXpXSjRWSkZhTXdTYTBCSnRnT3lSMk1YSGRHWU96MmE0WWV5dDdHOVhlVG0xL1IxUGVJYkYzeHVCOE50cUZGODdxRXFwZFNwZkw2SEk1WGJKMHlVbnNpaGlNa29uYjJKVTArVjBTZTNjTXR0SGtiU3hEbDB2cGNobGRMcWRMVm1KWHhTRHZUM2tQWGE2bXkzdnBjZzFkcnUxazExSDVQcnBjVDVjYjZQSitpZDNZeVQ0Z3NadGljQWtibGRnSFkzQVpsVGZINEFxeXpUdlloenJaTFJMN2NBeXVZcmRLN0NNeHVKcjZQeHFEYTZpOExRYlhVWGw3REs1bm81M3NEb25kR1lNYmFlakhZbkFUZGQwVmc1dXB2RHNHdDFENWNRWkhibHg3MWhyUEhjdGt2ZFRnRGk5YjNPZ1Z4blBaZ3NjZ1BwVE5ldm1CTWFkUThBb01qanBySWxmME5ucXVsOWxSTlpiSTFPbnE2QjlhdjNyakNJUHVkUmM2TzV5K01TYzcyamRjekdleW95Y3ptRG1BbzRwT3RyakZHWnZBMFRQV2JsNC9jTUdwZzV1UUlQWUdkMmR0M3JCcGtNRWgvSDdONE1DNm9mV0RmTVJzM2pLOHVmK01vV0RRckVnVEgrTTNyTy9mdUdFdDNnOEhrM2dEbjROTmh3ZWMramVQREc1Y3ZXYk54c0ZoYkQ2VTlCb2NHQnphTXJqbWdzRXRnK3MzTVZpd0xwY2Y3YnZZUzJvWDlqbkpURi9LS1RyRlhlTmVvWTlyamtvZHhxbFd6aU5hUXZTd3JXTkZKcHNwcm1Ld3E2ZmFPaEUrNC9sY01lZm14dnJPcHR0b2o1dmZOVjdNOVEza3ZSUXl6emhqaFpOOVN0dWQ0dGErL3N6b1VMYm9qWHI1T3EyTHRqQm9IOGlsMFBTSHJFTVFySi9ZbnZUeW01emttRWNleTduTzJCWW5uNkY3MGRoZTNKcEJPQ3hlbDhuMWpZODV4WFF1djkzc1MzbmJjMzBGdDIramQ5R0VWeWl1emVVSkxrNHhnKzVGaXh6aTVyTEZ2T01XVjZkU2VhK0E4NmR6OFJGVzliVkVOTGdsdFJqTW4xeHRCcDJqVHVITWZNWkZLZWZXVnRjZnN5NnpQVk5rRUZ2amplYzkxeWw2S1Fiek5rNGduZTNlbGt3aGczcXV6bVlEOFVOaTNEZWxPVWlzMEVxdmxYcUxPL3RReXI0QlliTlRTYXZjamt4SytPc3d0N3FEd1VtTkVXRHc5djBWR3FsdXlqdlpBbEpFdTV6aFpKMzZ1S3FQdHU1aUZRMEd4MDNKaHNHT0ZzdmRzTDA3UnIwaUR5UTlQZWYyTDZyRjBzM2xQWVQrZGd5UUE4N1lHQW83TFlPWW1uWnVQd0l1UFpIbGpCa2NYemR5ckJWamNHYlhjR1kwNnhRbjhvamlheHRrdUNLcXpNVDRHRkljOVRCNEUwejdObEdEdG1JeVA1V1p0T2E0VmZpUEZvOVg1TnNBZ3p0YkpwcHhnS0tkMjE4OTBoYzNsdkozTnU2OFUxRGdZR2dWTGh0ejZ2UjgrcUloOUd0bnBsQ1k4RktyTVlhODh3Q3BycWc3WnJ0WDNKcExGZnJ5WWllTllwaHZ0ZU5GcnVTTXdrUVN3NWx3eThaSjVLazJVNE42dDAwa3h4amMwSExTQjY1OGw2ODhkL0NaUFMxWC9IMHRKdGtDaGJQSi9JWTA2b3ZiMGtrOURhcXhxcUdCZFpZaHh4am55aUdHZkEvQktOQS9zY3ZMaDV2NThtWVlsSzlUVEwzODhGcVdQaUxORFQwSFpLeEZQck9KWW1hc2IxMm1RR25aVElxMXFWSm11cWJ4RkdaaHZmeVdqT05SQTg5ZlVlenV3ZExkMlpuaTFuVzVVUWE5NVp0TnNORXNyQjU3Y3ZrR0tiUmhzUEtBaklHNDJVRmN5QkNZL2xhYnBpdVlqUnJNaVhTdnp1ZWRYV0xNM1BKc0VHMHBNc0lWRmZSV05LNHQrZi9jV3Z4V3RNSTNSSDNtY05GeHQ1M2hqSE5oSlhZUEhrWWxkaStEbTFxTHI1WUpmR1Mrb25mdFdPNWkzOURyR2hHWjgrc2JMRzVkbXhrcjhsMElCY3Q3SlAwT2IyZGZRQTA1ZGFUNUNBYmFmcEJsOFA0V1N0TXk2MTFjWDZnMVh0cVpHQ3YyaitYY2JXYzZlUWVGTEU4REd4bGUzNW94UE1ibS9lRU0rcG9raXptRmwwMkp5VThlSEIxYTVvTzVRWlpZR2RMWE5zR2gvdE1HNUhEZWdZYU1TYWlUQmpjZnZOZ3doV1JIWFZUVlg0b1BIemhJSzNJS21aOTY3ZU41Q2cxRWlsTDJvS3pRZEFKUjh6bGJpemJBMnJSSjlvTzd6OVdYaS9hNXN0NFNqZy9pemxKZjN2OGZVYm0rL08xak9RZlBybmNkckFlTlRUMHZ2T2NnUHFOcVN0Q1AvdDgvQVd4S3Zqc095a096cGtUc1NIbmpZN2xkREs2b3VjSmFhYm1HVHNzUHZ3YkVhR0xWODhYOTdzWmtQakNuTm1TOVIxNGJralJyd0t2MzMrbE54WmFHYkxqbk5TTk1zMmE4OW9DODMzcExQdjVha3FkWlk4WWMxL1VLaFlXeUxETzRvS2VKMlZOL3psRGo4ZGkwblRKZEZHUTh1TlAxeGprcGlkMVhFa1FoUVlJYmxXN3Vib2xVL3VlbWphZXA5T1JvVWJuN0puK2tObTJueW1CWmN3eEttbXBSdFhXNjZWeEJXUmIvNExhdGh6NGlpZzNuSnZLdWg2bW9SeDhsMXRCK0dkazd6ajdCUGhsbm4yTDNNMWpVc09IWVVjK2FzaVdic2k0YnFxWmJzbUtZNkFwRk5oSW1Zc09TMHlramFXQy9qSDJHanFYaS96bXlrcFExeFZaTVRWTVN0bXpRdkpTbUlDMmNyNmswVzdQcG10YlNYcU04Tk95Z1BzdnkrelREbEQxWmNYRzJsblJOMTBpNmlxTFFDSnlSS0d2VnNWWFRiYjgxcGVpS2Eyc1diMFcyZm1zNm9kbTJpNUx6VmlVdFdoM1pWUXhGODF2VkJITDJKVENOSlBYTGxxZWpEbW5lTDFzcGY1WmllSnFIeXZOV1JiZjhWczFOcC9XVTRmSldWVXY0clpabEpmU2txdnF0bG1va2pHUkpjNkthMUgwTGF5YjlyOHFXb2dnck9WcTVsY2dpZ1ErczBBY2t1WjRraWJtVjBRdVdiaW1HU3JSazhvbGZJbTNranhiMGFidWVrVWg3TkFlMU15UGpjWXlzb1p3cVVjRjJwZFJuS3dieU5SUmIwTFR4enRJNFpmUUoxZ0xKRlprOGhETmxtby9VNUpBRzhVNXJKSzBoKy85cy9rZGppYTVDMGdncUdyY3N6dGFJcXltMFFDb2E1NEVHOGkxUUxpRlJ0dldBdWlFSFZyRlJMNXQ0azlVVk0xM0g2dWpjQnExdUdGcVoxYzBhVnVkelE2c3JsbDNINm5wTkhqWGFJbk8wcWhWcFZyZlU5S3k1LzU1Tlc1TjRWdkhraGp5cnFzWitlOVlzZWJhdWQxWFRpM3JYTEhsWHhSVmFHWGtxYkd3cG1vSGpUV1RQY1lFNE5HeWtqeTJjRzkxVHFFTFpoUGU1NWRERGlrSFdKU3RhK09mamluU3ZMWlVWa2NxMm9sTFZrRWtWTXFsVk1pbGNBcFczS0NWclc3ekdkZWQ5cHM3dHl2OEw4YWltOUNoZkd1bjdnV3JCR004c0d5TVQ1OEFuUG00dERTT0xUalBLdUdqWWtPQTBNSTVHYWRnK3ZqZ21aTi9LNUQ5ZERwREVmV29MRFdqbndIN05WbjM5b2lzQS82R3NscTV4NnJaS01wRmQwQXQ0WnhzRzdTaVduWXJHQSs2MXlUQ2lHZW1wdlZHQkR5V3d1eGxLUFluZEVhbFQybDF6MUFPM3U2c2ZSTHM3S2JlRzNYVTVoVmRYdDhwWHo2UXJKNWpqQlRUVU5OMGJlcFJHWmV4RGVWU01JUFhwVnZzVmRlSXhOTlRXdHhMVmtJZUNOWjJva3BkdDFKNXFOTmRmaVg0T2tVaE5nUjNkNTBBU2xUZ0UvSFNpaTVLclBQNGlITW5QS2xtSDloUkR0MHpVaFVjQ3NjL0tNcysyVUNVZUhVZzZXU2Yva2c5UlFrSTQrdGN5Nkk2R29XOW9aOWNObFNJcGVnM25FQ2YwcGlxaXM2RXFQSGVoaUUxKzFOTW16NHNvQThLeGhrNkl3VkwxVndENVhzd3lmU3piZkNYSXNvOFhxcW0wRnlSUlI1Nlo4RjZ4WHZ6ZGtqQkxOR1RFcTZYNm51TDdCYWNXN0NqVjFrUjl6RnIyRkxiMHVYTTcycnFOSzVhUVNYVFNhWnlwY1lzcElUWWJ3WU0yT1I3UWQveVBhUGplVUpJQ0dZYmxUSUdNU2swNHIrQU90VkhJTWx3amhlK2RBVHBVN3I4QUhWcGRkTkNLMENMb01EZzZETm1mYjBUUWdXc0dkeVJmQTZVQ0haZ1VsNkhEcEF4N1NuVFFyQU5GaDRuaHRGbDBXTFZzU3JFZ1FJaXRxQ0pINGRZa2YvSzZuYkJ0bTF1QjBNTDNYcUVsSDZHTGxXOUcrUVk1RjBVOThuMGs3dFhDbHRaWXJLRVl6U05NZ0NUVG1XcC93dTIybHQ2bFZXRUkrUVZTekZSRi9oRkVWSmRiaHZCUUM2OWtGZTV6UHl1UktjSllDZUpvR1R3akp1UWsrRnpxOVROUFN4YlIzcWVHOUN6S2tNa2pWdEpLa055MFIxbE9hVS9STkxJdHRmampiTlBuaWRtalNVajF2WWljeUpLNmJlUHh6L0lqQTNwUnRoTktBdVZCdFBQWVNWSFE0RWczYkkya3BOM0hKcnNtVEI3Ui9XanBZNStqRUhjYVUvZnoyaUNmNHJ1TkZrUmxuczJMZkoxeTVYQ2ZKMXZ3ZkY5Vy9YT3k0V2RtcXA4L2N4cGk3WEpkVmNVTjF5MHZoY1d0RU0rMEVQd1ROMXBFWUZVcDRiYldPZDNmQjZ0UDczNjd3SmFnS2RkWVJWVllxaE5oL1ROTjJTbVRRZ2JYSDQvay9GN3pjNW9HOThUeVZlcnppZHE3SkRsZkJXcWdQWG1OdEtuTUN5THJJK0ZuQmo3ZS9MeUxzaDN1VVlOanJFWkdRU3ZXVmhKcDNkQmtMMkVpSGhLeW9xWVVCVVZFeERuSlJNTEFrNitoNlRoR1NiaHBUSjd4UktTcExxSTRwYWZjbEs0bDdZUnNSL0lSazRkbnpQWDhtbzZZbEtlSUcvcCt4ZzNMVFU0Wk4ycnVRWFhqaHBYVzl5TnVKR3JHRFl2SERkekRncnFQUnB5WGlNUUhNNHdQZGxWOHNNUDRZQWpPR3E1N2xXSUFjakZGZExBd09sQlVvQXplNUZFaWdkbVFJVTZoS0VsVlhDQ1B0VFl1MlBRa2FhcTRZSW4xVEpuRmxIRkJDN0kvb29jMjhlT0R4dlVKNG9OV0p6N29Zb1ZYeDRkSXRLbnlvazFlck1aaEtaTWx2OUxlYXB0VjFxQ2NVd2trdFFSaVpVWGM2Mmg1UDROUXJSU3RVNjRGM1pGRkhEOHErT2NzLzBtWGhjNUVMVlMrZnVqWmoycFp2QVZYTnoxd01aS09ZdG1hUmtFMjZhVTkzRUJNTGVFWWpxYnJIbG9PTnltVGduOWFkZ3hQOTF4Yk14TzJtbkF0Vy9HOFpEcUJlSEx4ejhPL2xQK0hmRlE2R1FXSUlOVGFISDJVYzlOZjJWTVR4OVltZVdyaUpKSU5QVFZ4WEhtL241b1k5WitaaExISHFEcXRJVzQ0WG1TN1JwYWorYzgvbmJUWmREYWlUQnBWa3NwVStZMGVZSy91S1FyeFJKR0ZJMHNUTVlNQ2hJdXJYVU9NQlhIZXNPZ29qenhOc2NhNUg0M3E5VjF2ejVvYy9iWDJMTTVUSUo3TG92Q3NuVkRyci9sRWdIQ2J4eU9LQ3BRNThWVVJSQ0RWejdFU2FWZFBvSmVTbm1VbVpCTnovSlRyeXFacXBwTzY1V0dRU1JwYTBrMjU2UlFldU0xa1NqYlRLVDJKdTVMdFdDbGttVXpoS3JGTGZ4elZZdmNveDdhL1k5VkV0eXVyazZBNzZUa05vZHRWMDYxLzJ1c29BdHRhUlRZdTg3T0dYMWNqZGIzRzV4ellZNHZUU3hBL0xUNGllczRTVDEvcGRLTFhPdCtVbnJud1V4ZnBqMmVxOEJUbE92eUpLT250NDRTZXNDQUhucmxTZjBvTkpQQ2xJL3dTanBXZ04rRS9KZUJqZ24yR3QrTmVTRHV4VVRxUFJVNVlPQ2FaRUJpbjhaNS9JcWE2cC9ydGR2RGtCdmNnbWt2UG9wQnZ3Q0Y0V3E3NHV3VDN1ZXRaaHBuMkhOVTBURFhoNEQ4VnozOG9ucTJuOWJRbXF3azVvYVJTRGg0OGROdlJ2WFRLVXpCbFNCcWVuVXBqQXAvRVNaaG9tV21GTXRTMGl2SFlSQkptMHRRVG1wazJYVlBUTlRJeHVralcxRGc4eUQ1Tmx3Zm84aUJkSG1KdzdGUWZWakk0cHQ0UWVndWR3YUo2M2FWdkd2WHZLbm9GeFNTV0QwdnNNM0gyV2ZZSWc2UExKeEsxamJqdjVMMHNmWWR3U2VOdlhpa2FVWDYwdVRsNmM4TU5Zckdid2ZGVGY5TGNIR0Z1bFQxMGVheTVpWW5taGx2TkRiZWJHcTdLelExWG1odXVOb1N5elpsc0VWY2ptWEt2eEI2UHMzM3NpVGg3a24ydXpHdmxzemNYMDViL1loWk5lNm81c1RRR2g5ZDZIeUhPUHMrZWJvNVVjMmhVRFFheks5OHNpOE9uNEg3NmpQc1pCb2ZWZUtkVll2ZkUyUmZZRjBuUkw4WFpzK3pMRXJzM3pyN0N2aHBuejdIbkdmUTArcGsrZy80RGYxbWR4RmdhWjE5alg0K3piN0JGY2ZaTjh0YTMyTGZqN0FYMmZCeWVBN3k4Q0UvRTRRZHdaNXg5aDMwM0RudmdNWW05R0dmZmcxZWFzNWNwc2UvSDJVdnNCd3lVcGw5dWpiTWZzaCtSdUQrVzJFL2k3S2ZzWjNIMmMvWnlIUDRDcjhUaDAzQS9neld0ZU5rNXpuNUJKdmdscWd2ZlJlM1pyK0Q1NXRSTXhKbEVNajFBTWpYbm96by9ROUFNZHl2T1poSDNCK0VodWhEUTRHbTZmSmtCeE5tdjJXL284bHU2L0k0dXYyZnd1a2xmU21Fd0k0SWVCb3ViaUY5TmpWYWJHczEzbXo4d21Gbm15cVpJNkVUaWowMU5NWm9hYlRZMU90SFVhTXYzUzRDWXB1WTJ0NjBvelcwclNuUGJpb0p1bjFNejVqR1lWZjZDRm9QdVVzTlFrVGFjWEQ0SXM4aHhhRVA0MGhhQzJ0dkpxWEFNaDYrWWw0TG5ycDZEOXk3V2ZHK241MDc0ZWNvWkUyUEZ6UGlZeDhkczlJb1RlUlJlcnkvY1pLK3Z2YmZXbTg0SDdUYzFybngxcFduNHR3dXVhNTBjcmZuNWg2dGVkWUVhdHMxMCtnbURMVUVlVTBwVkNndzY2RWRDYU5HZDJITnVSTG9OeVFzOXQrWjNpNWMxOHlJa01UWHEycUZFdHZLZTVwM1o0dmRBa2VUeFBSRkdiaTdyVHVUeEJGVHNveFhLdjl4SWcrYjExUGZwbk5MMGdkelltT2VLMzAzcDhyYVBGM2VKNk5WVHcyckhpRmhRT3JsRUhNcmd0SVlpUVVNdkFzK3BZVzZ1ZTVVRXc5aFZFWkZHR3BBalFwNy9aRktqZ21WYkY0b2IreFo4ZXlIelZvKy90enFFTnoxRFpJWE9UTGloekMzelU3RFI0RHhwcTFOWWovc0tuM29PVHMzeW04T0Q4ZEVGNHY5bUN0OXE1RWwrR3FET2U3ZHRZelR4TUtTd1BwY2R5cWJRUmFuZzYvVnQyRXJlSEtySmxYNmZSUHlRVkp1VFNsVzRQVmk5S1B5UjllSUw3cnNlMzZsSzMwYWJVL043V2NoaHV6Tk9QMzFRL3IydDROZGV5aUJhN3p2RDNTanZRT1V2STVWYk5QeWxyTUtyL1AyejJ1dmpxSEp3Y2tnT1p0MGMvOG1oRG8vWEdHaFRnYmltUnJQUVJmNXEyNVFiejdoNGhxbTFTQnYrS21ENHhmVFphTlVLMkhRV0pzYkh4eklrdE1TL1FVcy80ekxiLytKUjlMSEozcDZxZGZ6cTd0R05iSVlOUnBJbjlsUDJBOWxHV3lqK1V5MDBmUk01U1FzMWVLYTFEamc0U3B6WVFGN0NmelN1NTV4RlcrQTRhSU5iQWMvV2NCVGNBWGNDZzQvaDNUUm9oM2x3VitRK2h2ZDNSKzZQeHZ1UFIrNTc4UDZleVAxU3ZMODNjaS9qL1gyUmV3WHZQeEc1Ti9IK2s1RjdHKzgvQmZkamZSNDlIdUhsQTd3OEFXVjdFQjVDdVIvR3V5eEkwSUhsck43dTlzVkxsczVybnpkOUQweC9tTlA0REY1aldBS2NEak5oSFh3V2E2djgwZkFJUEFyQWE3czVWNnJ0Z2NmNDZGbXdGeDVIK2xUYkIwOGdQNm85aWJYcDhEays2eW44NjhCWm44ZVNwSGthNjhRemlhM1R5WnFCTkh1Z28xS1dEVEFEenVTeTZQN1lVSlo0S0VzOGxDVWV5aEtIWitBTHlJMzRmWEV5N2FWS2pwdFErODFOYVA4bGVMWXA3YjljWC92T1NsbmVoTnFQTktGOUlFdWdQWU92d0ZleGoramVqalNwYi9NKzZCcnBqclUvQ1RORzJ2WkJmR1R4SHBnNS9Cak02bmdTRHFHVzJTTzllK0RRNFpIMmZkQk4xY09HUjZidmc4T3BPb2ZHN1lHNVoreURJMGIyd1pFanZVdjJ3THc5Y05SRG9lRGQzQVJ2aGpsd0hxeUU4MkVOWE1BVk9OWm5IaXF3bVo0M29vQnI0RkQ0R253ZFozK0QwL2dtdG4wckZQcFJJZlEyTHZUUjFVSjNDcUdQSWZGZXg0V2VUOVVGWE9oanFYcmM4RWpIUGppZXFpY01qMGo3WUNGVlR5eFg1U1N1eXV0cnFMSWRWY25DTU9UZ0hCaVBxTEl0VkdXYlVPV2NDbFcralcwdndIZUVLcmRDRi9maFNxNUtUMGU1S2lSNGZHUUpyNkxnaTBhVzdvRmVFdkV4d1A2NXk5dDc1N1h2aGlXVndsMENpK0V5V0FaWFlraDRWd1FvSzBQaFZncmhxUFpkckUzanRSY1JvRzA0UitJQ3R3dUJ2NGZqdmc4dkNZRWZSb0ZwQVF4eGdaZEtqUWhNbGw0MlFsanVpd2cvdlhmZTlCckNYdzBKdUFhV3cvWFFEemRFVnR4UUtQeFFLUHhRS1B5UUVKNXFQOEExMEk2emZUV21DelYraUROK0JEK3VhWGU1aHQwWGtScTlYSTFscEViZjFIYS9DZTErTTlyOXcyakRXNmUwT3duczI1MEVycmI3VDNEY1QrRm5RdUJ0WXZFdjVnSXJiU2d3eXRNdWdLNFNlRFVCM25XOWk3djEzV0JVaWtkci9RNDRCcG1kZ0RzRWlUZlhKeW5FT3dFNnVRQk1DUEJ6ckwxY1J3Q3pRb0FFQ1dCTkljQTlTT0plRk9BK1pQV0pCZ1g0UlIwQjdBb0JscE1BSjBjRVdGRkRnRThqaVFkUWdBZVIxVU1OQ1BCTHJQMEtmdTBMd0M1QUowbllmbC92WjJEbDR0MndDcVBFRzBhVzdJVlRHRWJiMWV1eDFvOW5vZlo1N1h0aGdNRXRjQW5WMWxDUUgxeU9NRm83c2dkT1hkNHhyNE53Zjlxak1PVFgzdGkyRjA2ZmhvTm03SVYxTlBnTS9QOVJXQzk2Mnl0NjlVZGhnK2lhWHRHMTRsRTRjK204anQxdzF0bjMvdTN0U3gvaWV3dHB2d3gzREVBZHUxRExJM0NQTUZEZVZiZy9uSVk3WXhyM3hrdHhsL29Jd3ZFdTNLUHV3UjBxV0hXcndJUGZ3Ryt4Wm1DMCt4MzhnY1A1dmhETzk4RWY0VTlvb3k3RTF0L0RQNkNkanNBMSs0L3dUMmlwZnhiVzlmditKZXo3Vit6N04rdzdGS2I5RlJaSThPOFMvSWNFLy9rS1JpcmY2SDlHZ24rQlY0VFgzNGdxa0l2bTlqNENHeGZ2aGVGcEtPc21jdmJtM2JDbDVPQU92cXFlaVRoMWJpam1YUGd2K08vUXFmL0Q2ZjlWME0raFNnU05CZnZnN0pIRlMzcDN3NXYyd01qNnBlaml4K0NjM1hEdTJiMUxkOE9iUzR4bThTanpiU3hmd0h6cU81eGhyMDhpWkxnQS9vYlNrRUFMR0dNMGN4YnFTMEswK1VLd2FjQllXNGlzT3dTeVhrWmtuZGNJc3ZhV0krdDhSTllGRVdTOXhhODVsY2hDZ0NRbkJaMWJCM1IrYjZvTzdoQ1NudWpxcU9hWURpRTVFSUdraVFrVjRMN1NoVHZMRVJnQkRRelFxekJBbjRZaDJzWFlkeW5HdnR0eDdUK09VZUJGREVNLzVwSGdseEZvM2dhL1llMGNtdmVHMEh3NWRNSExJVFJmQ3FINVhCVTBYd3FoaVgxc2VqMW9QaVc4aGlDalQvWW1nK1lvUVhOckRXaitkbXBvc2s1T2YycG9uaGVCWnFZU21uL0c4aThJelZmMkU1cGRLRVFzaE9hbEFwclBJalF2YkFTYXQ1VkRjeHRDY3l3Q3plMzFvWm1kRkpxNVNhRTVYaCthRjRYNE96K0NQeFhUWVVCVGQ4SGY0QWkwZzRIR1dJWEw4alJjbGk3aTZsSkV3KzNvOE1mUklVK2pZNzZJZGlsaDczTEUzZ3lPdld0QzdEMGIydmpaRUh0UGh0aDdzQXA3VDRiWXd6NFdyNGU5dTRWYlpxSmJaazJPdlR4aHIxQ05QWnc3TmZZTzRmU254dDZGRWV3Vks3REhYZ2V6Mkh5WXh4YnNKL1ptUXhjN2xIV0xvOWxiRUhsazJWbjdvRzJrVnh5SEppcVZXeGpKdFB6REdFQndHUE9QWlhUODg0OWwrMFNTNkIvRzJtc2N4b2ovWVpQeDMxSEpmOUdVL09rQTFnei93OFZoY0JPMmtnWGpBZjg5Y0hFbDk2VVJTOGREN3ZHUWV6elUzai8rdFhFT2MrcHoyRm5KUVptU1E2QmZpY05jZG9RQTB1bEloVFNlMmQyRzlMdmJ1M2M5Qm0rdFpHRkVUbEF6T1dIZ05SS2Q4Um9SRmljb2RpUm5NRzhTQm0rclpHRFhZVUNTVnpNNGlqTTRHalVtQmxzUUJmd0F6eGtzOVRtOHZaTERxb2lWWm9VY1pvVXErTDZmRnZxK1RmamU1M2hNQlFibTRrcWFoUHZmVlhJZnFNTTkwRzl5N3ZPajNHZDNzZ1hzV0dIYzVWalNySTVlRFAzVEtyZTAza2hZNldESGlWWGV3WTZuRkpxZEFCUnJHVnVJRkU5c09jV1QyT3NGaGdkUkcvS3JoUGJaRGF3MlNkLzFVa2hTUXBMMzgzNko5ZUFTbm9Za2UxdFBjbkdMU1VJblc0SkwzaWY1Szl4RTZMOUg5c0U3UnJyZkdUeXB1UVIzM0V2NUVmWXlyRjNPVDdCWFlPMUsvM0QwcnMvU29SY252RHQ0U25MVkNJYTE5L0FaVitPNDkvSVoxMkR0V241eXZ3NXI3K09QU0s3SDJnMGhsZk00bGZkTGdzcU5ST1VEbk1wTk9PNkRuTXJOV1BzUXAzSUwxajRjenIyUTVHZGMvL2s4dlZnSlBiaXRLckFhenhuOWNER2E2NU93Rm0weWlQQmN4a0hhQngvRktkUFFSdHZRU2g5QjNjL0g4allzMTJKNU81WjU4UDhiRmVVbVVTNFhaVUtVcWloUEV1VkNVUjR2eW1ORk9WK1V4NGp5U0ZFZUxzcHVVYzRXNVMzODJnazNpL0ltVWQ0b3l1dEZlWjBvcnhIbDFhSzhTcFJYaVBJeVVWNGl5a0c0Rlg0UFhmOExVRXNEQkJRQUFBZ0lBRTJhMms3S01QTytCZ1FBQU1BSkFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNall1WTJ4aGMzT3RWdnR6RTFVVS9tNmFkRW02UUtFdFVrVHdVU0ZOSDdjQzFrZHJ0WStOUnJmQlBpd2lJbTUyTCtsMnRudmo3azBwLzQ4ei9vcU9CWkVaaG5IR0YvNVBqdWR1WWlOdEdKcVJKSHNmNTl6N25mT2RlKzdaUFA3NzU0Y0FMc0hMb2grVE9RemdyU3hOMzg1Ujg0NkJkM1BJYUVrR1V6bWN4M1FQM3NPTWdmZDdrTU1IQm1hMVpzN0F2TzRYREZpNkx4cjRNRWRvSHhrb0dmall3Q2NNM1dyZGo0Y21HRVpzWC9KYTRLaWJNdHFjNUo3WWxEeDIrYkw0cGk1aVZaVFJVbDBxUi9reWpLZG8yN1FmK21xR1lUemZ3YjdoTlliMHZQUUV3MUhiRDBXNXZsa1IwYXBUQ1VoeTNKYXVFNnc1a2EvblRXRmF1OGRnbHNKUVJQT0JFOGVDcHVNSHR6bDBZWkxjelRpMVduQ2I0ZVJ5Y1dsWnVNTGZFcDYxSlVLMUxPSWFyU0pMS20vTHFNcHZpY3JGRFY2THBKS3VETGdySThFM2hWcVhYc3lqNW1KdXkrclVjQWMrUE0wcWVkWVZ5S29tMUpGdGhoNmhjZGFjZ0l3WldLVG9XUzNCRlYrdDJ4cTI4QjlZdGMzblphZ2l4MVZEKzljUzVHRjF1eWE4VmtBV25nL0JjM2w3dzlseWVPQ0VWWDY1c2lGY1JiSGJKMkxJV2R1dXFDVjRCc29NMlJXL0dqcXFIcEV2MyszZm9MMkxCTEVobzl2OFpqMTBrNjI4MkJ4TmR4YlM1MEYyUnJOWWtmWElGVVZmWis5Z3UvM2ptZ3BkQUN0MEF4bjdZWFV4OGNmQVpST2ZZc25FQ3pocFloRExKbGF3YXVJejBLMlorLy91bVJqQzZ5YXU0SE1EVjAxOGdXc01wMXN4Y2lvKzl4d0NvU3lJK1NxMUpyN0VkWWJVdFRrVFgyR1dvVDg1aEUxSHJmTTV2MW9LbGFpS3lNUU5mTTNRMnpxZ0ZSVVJLeE1PS2d5am5aeUNpVmZ3R3UzcDVIWS9ZYnFSR3d4bm41RWNCbHlHL0VFdkIwTmZ5OFJ1bGpJTUg5aFBxanpSbm1NcEJ2SldvOGJaQjZrOENTYTMxRHBsbGhKUm8veTBLUDZMcGl0S1hwZlpZem9OckhtcnRHWXQzTERXclBJcVJjVisybkVuSHVuc2RWeFh4QlRXQ1hvamZOdEphWDhHZEtlMXRZTzYxVmNWcWl6RFV1aUpiZUUxdEZRUDg4MGlVMWQrd0cwLzF2U09QQ21oV05GZWhvRjhxVzFGT2tUYUJJOVNQOTkyUmNyM2FKa2Z4M1hoelJMU0NidmRGZEdIVXE4RStoVzM5NWFRYXFBdFY3eE1MK29CRUNSWWI2K3VDZlJ2b0l1ZVFad2k2WXMwbWtHS3ZrQ3VNTElEVnJpSDFQYzBTK0UwdGQyMEJ2Z0ZMMUY3b3JFS1p3Z1R5VWlqTWZyU2JXdGkvVW5ZYWVyOXdvOWdQNkJyNUNla0Z4OGdjL1VldXN0amhHK01qZDdGb2E3N3lLYndDTG43NkdIVW0vVGJ3ZUZFbDk2ak83S0RvNGtpczBmUnU0TmpZM2QyWFQwRGc5cGZZZUkzb3Z3N0Vmd0RiNUpEWlR4R0ZYOGxGQW9ONTNZcCtMcVdrZXNtcnVNY2hnbXBuK3BrQVNQbzZwMGxXcU1rMGJRdU5rT1VMWXc4d3ZHNzZMdlROa0ptTXM0MjRjZm9TWk5rbkZxZXJKL0FHMGwvZ1FDMTdoSTVlSlpHcHlocS9XaDhNaVI5bFRET3cwWWUyWDhBVUVzREJCUUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rVVhWdmRHVlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT3RVc3R1RXpFVVBVNmFUaG9DTFFVS0xRK3BFZ3ZLb2w2QTJJQXEwVUtrU0NNZUtlcUdsV2ZtZHVMSVkwOXNUL2d1VmtoZDlBUDRLRlI3T2hJYmtGaXd1ZWNlMy9lOS92bnI0aExBU3p3Wm9ZL2RCQThUUEdMb0sxTXlIS2JHbHZ3YlpTOFd2TGJHbTl3b25odEx2Q0kvTjRYamxseHR0Q09lbXZJMXc5QTFkYTBrV1lidGRDRldnaXVoUzM3cXJkVFJQckRueTJuQjBQdDZ6SkFzRytNcDBxRjBycUhpcldmWXVRNnJoSi96WTFsT3RhZVNiQWp0TjVsaVdIOGp0ZlJIZ1Q0N09HTllPekVGTVd5bVV0T0hwc3JJZmhHWm9samQ1RUtkQ1Nzajd4N1gvRnc2aHIzUHNlNk1jcElyS3Q2dlNQdFpOd2JEZUtvMTJSTWxuS1BnTzBtbDRiVVMvdHpZNmhVdnFETGM1WHhHeTRhY254Z2Jjd2t2US9EVHY2Y043WTlPVFdOem1zall5TzZmNGcvajRHUGN3bWFDeHd6di9rZGhocTNmVi9pWUxTZ1BLejc0NTh6WVJ5LzhDbUFkWVhzWUJDMmNBRW1MUTJ5ME9PcndCc1l0M3V6c0xJNFM1Rlpndk9YQTRQa1BzTzlCNmVGMmx4YnNFN2FEUHI1MndCM3N0UGI3clh5QWV3Rkh3ZGJESHU1aTR3cFFTd01FRkFBQUNBZ0FUWnJhVG5JdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUJObXRwTzV3TGUyRVlCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFV1WTJ4aGMzT1ZVVXRQQWpFUW52SUdVUlFmaWZIcVFUUmFqY29Gd2dFaWlXWTFFUWozc2p0Q3lkSmkyOVh3c3p5WmVQQUgrS09NczZzblk0eE9NcSt2MDYvZnBHL3ZMNjhBY0FaYkpVaEROUS9yZWRoZ2tHdEtKVjJMUVhxdk5tU1E2ZWdBR1ZROHFmQW1tbzNRRE1Rb0pLVHFhVitFUTJGazNIK0JHVGVSbGtINVVpazBuVkJZaTlRZWVsTHplU2pjblRhek9nOXdwcm4xZVEvdkk3U3VxODF0cEoxd1VpdTdlOTVnVU96THNSSXVNc1I0NVdrejVvODRPcDF5TVpKOHNKaGpEKy9Rb1BLeCtlMHdFRVJEQTVhUGtRUUlod0Z2THh6YWszcWpSY1Nsdm82TWoxMFphOTMrNmYyanFYZ1F0TzZGOGtOdHBScGZvNXZvSUErYlpjaEFsc0hCUDFaaHNQT0xlQWExUDNQQk1hVG9rMkpqNUtTRWNvNHFUamxHc3Z2UHdKNm9TRUdlWWk0QjIxQ2dXUDRjZ0NJc0pWZkx5ZFF5ckNTNUFxc0p1a2F4bERnak5MYkNCMUJMQXdRVUFBQUlDQUJObXRwTzRqYzdQa2NCQUFBakFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpsVkZMUzBKQkZEN2o2NnBabGowZzJyYklDQ2NwM0NndWtvVENnbFRjai9jZWRlUTZZek56QzM5V3E2QkZQNkFmRloxN2F4VVJkZUM4dm5QbTR6dk0yL3ZMS3dDY3cxNFIwbER4WU51REhRYTVsbFRTdFJta2o2b2pCcG1PRHBCQnVTY1Yza2FMTVpxaEdJZUVWSHJhRitGSUdCbjNYMkRHemFSbFVMcFNDazBuRk5ZaXRiV2UxSHdaQ2pmUlp0SGdBUzQwdHo3djQzMkUxblcxdVl1MEUwNXFaUS9yOVNhRHdrQk9sWENSSWNycm5qWlQvb2pqc3prWFk4bUhxeVgyY1lJR2xZK3RiOE5BRUE4dFdENUZVaUFjQnZ4aTVkRFdHODAyRVJjSE9qSStkbVVzZHY4bkFiVzVlQkIwNzZYeVEyMmxtdDZnbStuQWc5MFNaQ0RMNE9RL3R6QTQrRVU5ZytxZnllQVVVdlJOc1RGeWtrSTVSeFduSENQWjQyZGdUMVNrd0tPWVM4QXU1Q21XUGhlZ0FHdkowMUt5dFE0YlNTN0Rab0p1VVN3bXpnaU5MZjhCVUVzREJCUUFBQWdJQUUyYTJrNHZqTHpnVVFFQUFCb0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNReExtTnNZWE56alZITFRrSXhFRDFGQkVFVW4yaml6aGlqTHFqdmhSbzJSQk1OdWhCMTRhN2NPMXhLTGkzcExUNCt5NVdKQ3ovQWp6SU9WemU2VUp0TXp6eE96OHlrYis4dnJ3QjJzVmpFQ09ieW1NK2pJcEE3MGtiN21rQjI3WGI5aHFGdVF4SW9ON1NoaTBHdlJlNUt0V0xPekRSc29PSWI1ZlF3L2twbWZVY25BcVZUWThqVlk1VWt4T0ZxUTF2Wmo1VnZXOWZibHlIMXJFd0MyZFM5Zmt4TmI1MkthR1hyVUNEenNDa2diZ1VLVFIwWjVRZU9OYzhhMWtYeW5sbzdYYWxhV2w0OTl1bVMydVRJQkhUMG94Z3FyendURWhrUmo2QThoZkphRzcrOXQzOVk0dzdGcGgyNGdFNTB1c0szQ2FwZGRhZDQwMk1UeERiUkpqb24zN0ZoSGdzbFpERXFzUEtmTFFTV2ZobFhZUGx2RVd3aXcxOHlQSUtOZXpQbTJEdmdmSVl4dDdIMERQSEVYZ2I1WVp6eXFoamp1L0xKUUFIanFVSU9KVXh3UFl2SmxGL0dWSXJUbUVtMVova3VwaWJTbDhEWUIxQkxBd1FVQUFBSUNBQk5tdHBPb1djZnMwWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWlZWUxoSU5FRXMxcUloRHVaWGVBa3FYRnRxdmhaM2t5OGVBUDhFY1paMWRQeGhpZFpGNWZwMSsvU2QvZVgxNEI0QngyU3BDR2FoNDI4N0RGSU5lU1NybzJnL1JCYmNnZzA5RUJNcWg0VXVGdE5CK2hHWWhSU0VqVjA3NEloOExJdVA4Q00yNHFMWVB5bFZKb09xR3dGcWs5OXFUbWkxQzRzVGJ6Qmc5d3JybjFlUS92STdTdXE4MWRwSjF3VWl1N1gyOHlLUGJsUkFrWEdXSzg5clNaOEVjY25jMjRHRWsrV0M2d2gyTTBxSHhzZlRzTUJOSFFnT1VUSkFIQ1ljQXZsZzV0dmRGc0UzR3ByeVBqWTFmR1duZC9ldjlrSmg0RXJYdXAvRkJicVNZMzZLWTZ5TU4yR1RLUVpYRDBqMVVZN1AwaW5rSHR6MXh3Q2luNnBOZ1lPU21obktPS1U0NlI3T0V6c0NjcVVwQ25tRXZBTmhRb2xqOEhvQWdyeWRWeU1yVUthMG11d0hxQ2JsQXNKYzRJamEzd0FWQkxBd1FVQUFBSUNBQk5tdHBPaWRnQ3VDUU9BQUNOTXdBQUtBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNQTldnbEFITmQ1L2g0c0RLeEdXRUlTRXJKc2JBbkpIRUk3dTdNWE1sYURBUjBKd2k1Z3FUaHQ3V0gyTGF5MTdKTGRBVW1PMnpSdG5UcE83SnhOWStkdzJyVE4zVHFIUVFwMjRpWnQycVQzZmQvM2ZhZXQwenI5LzVuWmcyVlhHZ1Myak1TYmQvNy85My92Zi85Nzg0YXZ2Zmo1THdBSWkzNC82dkMwZ2s4MzRUTituTVJuT2ZrY0o4OXdzcVJndVFscEJaZjh1SXpQSzFoUjhLd2ZXL0djSDAzNGdvSXY4dmpubTVCVDhGTis3TUNYL1BneWZwb3JmNllKaXdxKzRzY2VQTmRNNVovbHlwOVQ4TlV0K0JwKzNvOTkrQVhPL2VJVy9CSittWk5mVWZDckNuN05qd1A0ZFQvMjR6ZWFLZmViblBzdDd2amJXK0RINzNEZDczTHlleXpoOTFud0gyekJIK0tQRlB5eEh3SEc5U2Y0VXdWL3h0ciszSThRL3NLUHY4UmZjZTZ2dWU1dk9QbGJUdjZPazcvbjVCLzgrRWY4RStmK21aTi80ZVJmT2ZrM0JmL2VoUDlROEo5K0RPSHJDdjdManhGODNZOUIvTGVDL3hHNGVjTEs1bVJpMkxDTW9Wa2pNeU1USTRzeVk0M0wvSHcyazVjQzZxbE1SdWFHMGtZK0wvTUNqWGVlR2hzY254Sm9IWDNBV0RRQ2FSb1RtTEJ5cWN6TTdRSmJoMmlRWldTc00wWjZnUWJmY1B5ZXNhSDdKaWJ2R2g4WkhoNmNIQlJvY21wR0pndlpFNXpkWGVveWRISnc3TVRJOEgwalowYkdxS1ZqTkp1YkNaeVgwL29EQVdNNkZVZ1FVT3Zpdk13SGJKeWtzM0VnbFVsWnh3UXVkcTJGVkRaNlBwZTFzbVkySFRqTHhmSVdNM2R4M3NvR2hvZ0hFcGt5MHZuYkhVbHpoalVidURNMWN5cGp5Um1acTFIYmZVYkFONVJOc0wyanFZd2NXNWlibHJsSll6b3RtYWFzYWFUUEdMa1VsOTFLbnpXYklpNDdSMVBad0h6YXNKTFozRncwa0pCejJVRGVERXlrNXViVGt1ZkZtSkZrNEExbU5tUGxETk1hVENSeU1rOERHMnpjQW50cm15ZXd4U3paUS9OOFpYdHBObWFNL04yNWxFbncycXJiNmZRWlRjMmxMQUgvc0p6UFNkT3daRUtnZlh5QjVNekpNNmw4aWd3Y3pHU3lORXNwOG9XaU1IdFNTbU5JV0g0enA2dlVhbDBJRU1yQWtNdlpDYllxdTVoS3VCTzF3MXpiSUhESW13Q0JoNjRWTkVtZHpCbVpQRWtrWGs0YkdhTzJROVYyczFacmpReUJXNitxUm1CeGszRjc1dHVmTDhZWG9ybXJ1NXBTazNvRXhzbjdMVGxrcE5Qc2FNbUZqSzFRWUgvTkFIRGM3VVA5bXlkU014bkRXc2lSOXg3enBHU2dPc25IU0ZoOVhwS0REM1RWbUFhUEZtVGtlVGNJdm40RGtnWnE5cG1UMW13MmtRL2szRWhkUGszajBwU3BlY3V4Wm9hdDJVdHA5VWhQUy9TdXJnMXA2WGJNVzdCUzZjQm9Lczh4ZVN2UFVLSzBpUXg1aUhTZFY5NkpPS0pKcnJCWkpkU3RJNlhTMlpRMU81cWRFZWhaN1prRnIreGMyL2YyMWF2Sk5VYmdqZzF4UWE2NHlGcVlCNEZ0YTVscExvd21DM2FWTlEvbWNzWkZ0MC9iNmoyRHFIVDNqWUVLZVFQZXJXVlh1TGVhdm9GTm1Cb1d2blhDTXN4enA0MTVHNnVDRitpZ3BPQWJBdS9lWE8vYUxMdzM1NnYyT1o3T25uZklIdldDKzNWRXNSVVlzV2FQcDlLV3ZhWUpYVTZ5Q1l2eVFxQWdqWThwU2J1SGdINE5ZZ1hlc1lsb05vdkM4N1V4RGN1a3NaQzI3a3huelhOM0d6bURNSzdlTnJ4MHIwMG03U3BHenVrdUVGaW5XQXJPTXBOd0J6OTdmV3pZckNud3BiTUdIY0RlZjcyT3Z0NU9zRTlkeDFPVE40VHZlZmtQbzk2QVBYRmREbTdlc0RVbTVIdzZlMUhneWFxTGFQTzQydEJKVE9YWHd4VHZwL1pwckZWbVRIcFhTOWh2cXJrRms2d1JlUDRWYTRDWFFHRkhnZzk0TTJFamJyR2hhZmp5S3htZlo1WS9kTzJPc282Z3RTR2l2L0lLaCtpWjZ3OXZ5R05lTHJxLytzcEg2Wmx4djJHYU1wL3YxRFRORGlnZWhsM2xlczc3MFo5ZlVycFhFM2JsdDdlNkN4b25RVTVDQWtmV3A0b09nUU5tMnIwNXJPK3lyeW9tc2dzNVU5TFptYmVKVldZZVllNVYvQy8rVDJELzFWa1JkYm1vRnRlaVdsaUxoUFJ3WEF0R29rRk5DMnFSV0pTNGpXdkpSR1E2NHJRSHFTV285K3R4amY0NytiaE92OEU0NVIwSlVTMmt4WU5CVjRxdXI1WkNFcWdVaVVTMXBDTkJDMGU1UnUvbk5La241Um9zVkYySlJBdnJORFNxNmFiVG9sTXZxUVZOR3FtSGpLQ1JOQlA5d1RCSkNVWmlYRWZhWkRnMkhlUzZTTDlibHdpYk1xcWJYQmVMUkdLUjZaSU9Ha2x5WTlPUnFKMm4ya2l3UHhnUFJVTDBKT3Y2U1NYYnFWRXVxWE9mbU02bzRseXRsekdnUlJPcnNUUFNlSkRsRWd1dW51bTRvNGRxd2s2Yk00SktJZElaY1pqdjF3aUI3dnpHa29hTWhhTjZUQXNGcGE0WlJHRTRGT3ZYdzFvd0dJOGtRMlk0bkRDVDlFNGFqWnV4WUxBL0hqZU51R2JFa3JvWkN5VkRzUmpKTW5TYURhMmt1Wi95U1dtRW9wRm9LR2JRdjVDdVJlSWhMUnBOUnJWRVdBOGEwMGFNeFBTSFpGeFBSSU94ZUV4cWlYNk5LWlQ5WmpRU1pPT2lab2dLWkhNd0tDVmgwV1UwVE53a28yWlVEK3VzU0RPSXZKQ0tDYnpJeVRjcG9XTVBKVUxnbHF2ZG5nbnNxOVdGYng0VVVhZUtldUVUdUhGMU4yNGNsMG1aby9NVXJaZE9EKzh6T21OcTRLUlJZR2UxY0tZS1JUUUpkTmRDTkNNek1zZjN4NEY3VWhrckZJbXlzR1pGK0ZXeFJhaXEyQ3BhdkVFSnEvaFdqTk9LRmpjSTdLaHlMYUxnQlZWc0U5dFpRYXNxZG9pZENyNmhpbDJpVFJXN3hSNkJMcStoU21Cd3crOTZQSzJmVWtXNzJLdUtHL0VKVmV3amE3RW9ibExGeldLUEtqcHd2d3FMRW5HTHVGWEZhL0h0aXRpdmlnTjR6QnNkRVVWMHF1S2dPQ1FRWFBjMWd5cHVFMTNNVTdjaWVsVFJLdzZyb2s4Y1VmRldQTWJBSnptWjVjUzI0NXdpQXFyUVJGQVZJYUZ6RXVZa3drbFU0S1lyYmlnQzI5Y3c1YzNFSUNPTWVldkxhMG5FQlhaVm5XT0JsdFZYVXJSYmxDcE9XZXloL0ZKeGs3eGc5N2VCRjI4RVNtNXhzZXY2Ylo1dnFmWmFlZDIrbmozODBxTHgvTEhpOGMzRHNUbmZleDU1eVFGNTVtWmJSWkRrYjhIOE5aRGQvMkRYYTh0UTNUWDlnRFNyZmhhNHpkT1JrclZGYWhwZWtsZFo1bkg3NVFWcExsaXlkUGlkb0tGcGFmdi91TFFXY3JUaFRkVmVlTVZ2U21YcTdXL2ZYbDhIMm10OTdDRnd1MHFBaDdMcHREVGRUNlROY203ZXV1aEdrcTRxdk8xYlkxWFpWQXFjOUdDUFIvaVp6WXRKM3I0VStmS3BCNlY5QWo5RmhhNVR6Rk5UcWhoRDIxYlJVWWl0TkU2Wk5mSmpGR0R0b2ZmUzBJeGQyRm5vWCs2SjVLa3owckpqcm5hRmo0TTEzaFBxMHp4d0cwazRsVW5RUkNRS0g2QjJFZHBxeXBxb3EzdloxSlJOSjl4c3ZaRkk4SmdxQzRYZzc2bTFoR216a1hiUUxuMlkyRlgxUnBrMHpCbnpBa2U3VnQ4NEY3NmtydktGV3ZmcXJRUjlxUEt2RFZaeld2eGJqL3hMZkhPK1ZpZjd4dDdWN21rNzVZaDlvMGZlMHVqYzdRbm9WM1BqcWhhMTBCUTU0V0l5TzU4eUJZYXJSQ0V2L3VNY2tJcmZiaXFPTklWNUtNTGU3c0JlZFNQWjJiVW12RldEdk0yNWdpMnRZWUhMWFd0aTE4dHh1WG5sTGNwaitIbjJHckZ2L05ad1UrQi9jUk9wWC9mTjBLWlk4S1hObllEclk0U3Y2MTRPRlFjOW5DRzZ6K0JXMU9Fa2dBYnN4V3N3Q29IVFZLcERQZG94VmxadXB2SmRaZVZXS3Q5ZFZ0NU5aWHFucFB4TytQaTFoeVRjUTZVTUZEVFNzNldudGI3M2NGKzdyNzFoR2I1UDIyUE9VTXAvcGdmbzJJb3d6bEx1bU5NYjM0WXB3TTdkYTJ2aEhMM1kyYjFiOEIzNFRwTFB1ZnR3UCtuam5FRzVCa3pibzB6NmJhUlJDWG95R2tsNVJqTk50UTMwVkF0b2x0RlFpU1dHTFlqYldNSk8zeUlXdFloRkxXSlJpMWhVSkRGRDJsamY3SldzYjZ6VU9FRFczN0VPNjFONFlGM1duNnR0dlZLSjVWVmsvZUE2ckM5Z0tWZ3ZrTVljdGJHK2M2N00zaFUwVGJVMjF6OEgveVZzOFQwSGRhcCtCVnVuZXBiUk1rRTF5N2hodEtlM2Rkc1N0ajlkaE5OcUd6WU0vb3ZOZlRpT0F6aGh3MnB6Ukxxd0RxQ0pTTTZTMm5sNzVPc29sMFBlQlpBbHQyVndCMjBBcmFUWno1cDNUUFV1WXlkcnZvUmRwUHgweitFbHRGV3FmZzEya1cvdm9WWFFRWjdQcW05eGhCVVpPY2lYRHFTd2czaGxFSFV1aUFXcVc2ekJ3dTRLRnZZd0MrMVhZV0dDUkV3U0MvZVF2V2M4c25BZUZ4d0E0ZzZDclZEOW96MmZ3ZDdlSmR4NGVnWDdwZzVmeGswQ3k3aDVqSElkZEhMeXRmc3U0eGFCSnpETnVWc0Zuc2Yrb3cwck9EQzFqTTZqamUyTjdRMUxPUGdNRGptNTIrb3ZvNnVPT3Zrdm81czdiM3NHUFc2VGIyMVRiMTk3NHhJT24vM0lONS9zZTlwMlRMYXZoeXdET1ZZenVkUnVjcW9JTGFkanRLQk9rbXViUk81M2syTS9USTc3Q0pVS0MrUVllY0pGUEVpNUNJV2cxK083YkVkOXREZ3RqOUtvTnhBRHpYZ2p2b2QrT1RqbDhiMzRQdUxoKzEzdW5MYUhpMjF2b3JZZm9MYnRxSHNSSFFvZVVmQm1CWSsrUUN2Wm9mUXRKUEN0ZU15ZDAxY1RmSjZBdHA3UG9hLzNNbzdVWVFVQm5rcHRDY0hTOURYYTYyV21iTXJhaWpEYjhEamVWcHl5dDl2eTMxRjAzQVo3NGp0V0VKcnFQZHl6QkgwWjRiRSttc0JMaUN3aGVyYW5id214a3FJVzJ6VVg2TGxJZ2ZpOHJiREhFVkZVMklGMzRsMDJvQTY4bTNKMTFIdTdEYUxlQmZHRHhNdDc4RU51OExxZnZJYVpiVmxCM1ZTUEd6RGlsY1k5VkJZc25IQ0ZZcmdTeFdCZFZ3eFg5Y1Z3NWFzU3Jsai9lNitrdjc5Uy94dXZxcDlEMUhyMFArR0d5MG1xWlFiVmd2NWxISzNVL25BWjAycFJ1MXJVcmhhdGR3Smt2YTNoeWRvYWJxL1U4T2FyYWlqWVY5THdQcnpmZGFRSDNaRGZXWXA5ZmNYWU4zRFUxMXBIYWx2cjIzMlhjRWRKc3hPd0hxTzE4WGdadTUyMlR0ZzV0a3JZT2RaWlorYytZTE83bXphekR4SktuK3RUVDlsNFByUitQTWNxOGJ5VFpMK3JCaDdtd0J1ZUg3YngvQWlWR2MrYjNBMzZVQWtQZTFrUlVJTU5xSThRTlZ6Q3QxUWllaTl0RDArVWJkeUhpb2dPRlJrNlpIdGRuWjB6WFA4N1pHUHowZWdXRzF0aDQzWVFmcmpDSTkrSEg3MFd0SytxUlB0QjB2ZFVEYlFGL3RhUDlzZkswVzVyd28vakk2NTNqOUJvSHE4UXBpV0lTc2Z1TE50VEZYelVEVklLUGthblNHSG5QbzVQMElnbWZCS2Zja1crbXVqZ241NFZERTYxM3RuZ2JxSkRVOFRDOE1TVWJ3VWpuRDN1N0tjblBvdTlmTDRSWlNHeWp6UWVRVGM5Ni9BVE5xS2ZKS25BVWRKM2dFcW5TRU1BenM4ZTk3blZmWTdZYVJPRzNPZCsycVllUXZQL0ExQkxBd1FVQUFBSUNBQk5tdHBPWTFJN2xWRUJBQUFhQWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNaTVqYkdGemM0MVJ5eTRFUVJROU5jYjBHTU40azlpSkNCWkt4bU9CMkFnSkdSWUdDN3ZxN2p1dHBMdHFVbDNqOFZsV0Vnc2Y0S1BFbldiREFwWGNPdmR4NnR4N1UyL3ZMNjhBTmpGWHd3Q21Ba3dIbUJHbzdHbWovYjVBZWZsNjVZcmh3TVlrMEdocFEyZTlMQ1Izb2NLVU14TXRHNm4wU2puZGo3K1NaWCtqYzRINnNUSGtEbEtWNThUaFVrdGIyVTJWNzFpWGJjdVlNaXZ6U0xaMTFrMnA3YTFUQ1MwMmR3VktEK3NDNGxwZ3FLMFRvM3pQc2VaSnk3cEUzbE80Y1N0VnFPWEZZNWZPcVVPT1RFUjdQNHF4OHNveklaY0o4UWpLVXl3dnRmSE5yZTNkZmU1UWE5dWVpK2hJRnl0OG0yRHRWdDBwM3ZUUVJLbk50VWxPeWQvWU9NQnNIV1VNQ2l6K1p3dUIrVi9HRlZqNFd3VHJLUEdYOUk5ZzQ5Nk1GZloyT0Y5aXJLek9QME04c1ZkQzBJOEwzaHFxZk05OE1qQ0U0VUtoZ2pwR3VGN0dhTUZ2WUt6QWNVd1UycE44MXdvVHhVdWcrZ0ZRU3dNRUZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUJObXRwT2ZZS3ErNlFCQUFEbEFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpsVkpOYnhNeEVIMU90MWtTRmhvS0xaUUM0dEJEMHFJWTZNZWxWUTVFUkFJRnBLWWxGeVFrWjNlNmRiV3hnOWNMNG1mMVVGWGl3QS9vajZxWVhUZ2doRkFyeTU0Wis4MzRQWHN1THIvL0FMQ0ZKdzNNWWJtSkFQZERQQWl4SWxEM3h6cGZleTZ3TWRSV3pqTGxqNnliN3NpRXBsYm1zUnpSNTRKeVA3QnV2N0JlZVcxTnZzdHBlOXBvM3hQb3RxK1IxeGtMQkgyYmtNRENVQnQ2WDB3bjVBN1ZKT09keGFHTlZUWldUcGZ4NzgyZ3BDY1F2VEdHWEQ5VGVVNGNkcTkrNTlxTFRhYmJPTkNwVWI1d1hQTHQwTHBVZnFYSjVvbFVFeTBQdjgxb1JFZmt5TVMwOTlkaG9yZ09BM0taRWpOUW5oTDVRUnYvY250bnQ4ZUZtd2UyY0RFTmRFbDI1VjhFdWlmcWkySzlyMDJjMlZ5YjlCMzVZNXVFZUJoaEZZOGl6S01lSWNSamdXZlhVU1d3K2g4ZEFwMHJGK1BmVE1tUEJ2c0M3ZmJIVjUwL25tRG1yTGV4eldSc0hYSHkxSHJxcXl4ajVYUHR6aGhQdVo4Q2JpM1JhcFU2U285bmlCdHNHK3oxVU9NQk5OYzN6aURXejFFNzVhaUdKcS8xQ3ZzSk4zbGQvb1ZDaE50QTVjMVg1d0VXS253TGR5cTdpTHRzQTl6REVtNVZPQ1pTWmVBblVFc0RCQlFBQUFnSUFFMmEyazRVT1JSWDJnQUFBTkFCQUFBUkFBQUFVMmx0Y0d4bFUzUnZjbUZuWlM1emIyeHRqOEZPd3pBUVJPLzVpamxTQ1ZWdzRGUnhnaitJeExHU2F5OWhKY2VPN0hWTGhmcnZiQjBTa3NKeGQzWm4zZ3pKZEwxQmpwNGR5eG43aCszVDluSFhORFlHU2NZS1d1NEhUNjFFdlNSOE5VRGhJQmpLd2JORjFqMjVWeU5HZndBNmttcnR2SHo1TUtFamQxZGZPRGo2SklmbzNadnhoZTZ4V2djNjFmV21PbWwrbGxTc1drM2ZMR3o4ZURMRlgzR3dnTUR6Nm02bjh1WHE5bDZDRlk0Qm1XUzBtOVBXVmxXYkFOVnQyZTlQMU9SUmdiVjh6LzkxLzYyN2FIakwxU25YakhKa09pR1JsQlF5Umx5ZDlIWHpRemxxTjNCcWVHbStBVkJMQXdRVUFBQUlDQUJObXRwT3NsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBRTJhMms1b01pR25TQUVBQUNNQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVEl1WTJ4aGMzT1ZVVXRQQWpFUW5zcGpBVmRSZkNUR3F3Y3hoaW9xRndnWElvbG1OUkdRZTlrZG9HUnBzZHZWK0xNOG1YandCL2lqakxPckoyT01Uakt2YjZaZnZrbmYzbDllQWVBVXRrdVFnWW9ER3c1c01zaTNwSksyelNDelh4MHl5SFowZ0F6S25sUjRIYzlIYUFaaUZCSlM4YlF2d3FFd011bS93S3lkeW9pQmU2RVVtazRvb2dpcHJYbFM4MFVvN0ZpYmVZTUhPTmM4OG5rUDcyS01iRmVibTFoYllhVlcwZDV4dmNtZzJKY1RKV3hzaVBMUzAyYkNIM0IwTXVOaUpQbmdjWUU5SEtOQjVXUHIyekFReEVNTEVaOGdLUkFXQTM0cmxhMmZOWnB0SWk3MWRXeDg3TXBFN001UEFtb3pjUy9vM25QbGh6cVNhbktGZHFvREI3WmN5RUtPd2VGL2JtR3crNHQ2QnRVL2s4RVJMTkUzSmNiSVNRcmxQRldjY29Ma0RwNkJQVkd4QkE3RmZBcDJvVURSL1Z5QUlpeW5UOTEwYXdWVzAxeUd0UlJkcDFoS25SR2FXT0VEVUVzREJCUUFBQWdJQUUyYTJrN2tmVjd3UndFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjNVZSUzA4Q01SQ2U4bHJBVlJRZmlmSHFRVFJhZzhvRndvVklva0VUQWJsM2R3Y29XVnJzZGpYK0xFOG1IdndCL2lqajdPckpHS09Uek92cjlPczM2ZHY3eXlzQW5NSldHYkpRZFdEZGdRMEdoWlpVMHJZWlpQZHFJd2E1amc2UVFhVW5GVjdIY3cvTlVIZ2hJZFdlOWtVNEVrWW0vUmVZczFNWk1YQXZsRUxUQ1VVVUliV0hQYW41SWhSMnJNMjh3UU9jYXg3NXZJOTNNVWEycTgxTnJLMndVcXRvdDk1a1VCcklpUkkyTnNSNDJkTm13aC9RTzVseDRVaytmRnhnSDhkb1VQblkrbllZQ0tLaGdZaFBrQVFJaXdHL2xjcld6eHJOTmhHWEJ6bzJQblpsb25YN3AvZVBadUplMExybnlnOTFKTlhrQ3UxVUJ3NXN1cENEUElPRGY2ekNZT2NYOFF4cWYrYUNZOGpRSnlYR3lFa0o1UUpWbkhLQzVQZWZnVDFSa1FHSFlpRUYyMUNrNkg0T1FBbVcwcXR1T3JVTUsybXV3R3FLcmxFc3A4NElUYXo0QVZCTEF3UVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFM0xtTnNZWE56bFZKZFR4UXhGRDFkaGgxMkhXVUZSQkUxUFBDd0MyWXJxUGdBMlFjM2trQldFL25ZRjU2Nk01ZWhaTFpkT3gySVA4c0hZK0tEUDhBZlpid3ora0NJTVpDbXZmZTI1OXllMC9UbnIrOC9BTHpDc3dhbXNOaEVnSWNoSG9WWUVxajdNNTJ2dmhCWUgyZ3JKNW55cDlhTnQyUkNZeXZ6V0I3UXA0Snl2MnZkeDhKNjViVTErVGJUZHJUUnZpZlFiZCtDMXhrS0JIMmJrTURzUUJ2NlVJeEg1STdVS09PZHVZR05WVFpVVHBmMTM4MmdsQ2NRN1JsRHJwK3BQQ2N1dXplL2MzWGpEY3R0SE9yVUtGODRicmsvc0M2Vmx6UjZlUzdWU011anp4TTZvRk55WkdMYXVYYVlLTzdEZ0Z5bXhBcVVwMFFlYStNM1gyOXQ5N2h4ODlBV0xxWmRYWXBkK3BlQTdybTZVT3ozbllrem0ydVR2aWQvWnBNUWp5TXM0MG1FYWRRamhIZ3E4UHcycmdTVy8rTkRvSFBqWmdJektmbXlabHE3ZmZLMmMrVVJKczU2Rzl0TXh0WVIwOGVNNnFzc1krOVQ3YzRRSy95akF2NWNvdFVxblpRWnp4QXpIQnVjOVZEakFUVFgxcjlDckgxRDdRdFhOVFI1clZkWWl6dThMdjVCSWNJOW9NcW1xL01Bc3hXK2hmdFZuTU04eHdBTGVJQzdGWTZGVkF6OEJsQkxBd1FVQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJPMVhUVy9iTUF5OTUxY0lQU1Z0bHJTSDdWSmtRTGVoUUE5RjF3NDlEZHRnVzNRbXpMRmNXYzRhRFAzdm95VExrdndScDFpMzAzeHBZMUVVK2ZnZUtSY2lXbThpVXZLTVVTWjM1T3ZwNHZYaTdId3ltU1E4bHlKS0pMbURod3BLZWNuRmJjVmxKQm5QUy9Kck1pSDRMSS9KSy84aGQ1ZTM1SnBUeUZydmo1ZG1BK1RWUmhsOVFrY1Z1cm1EQk5nVzZKeDhnQ1JqdWZwUEhRTWZCZDh5Q3ZUSjdDdWxxUHBqd1ZCSS9jUTdDZVhaRzhMb09Wa3V5WDBKYVpXUmxBdFNDQ2doVDRCc1FiQ1VKWHBuczY5aXVTU3NMQ3VnRi9LOGVZMW5zbnhOcWpoejcxem9wZjVqVnVvZ1lRdm9DRTFzVmxNWDBUdzhaZTU1bnltNGU5SFVTSXpqcWMwc29qZHBDcUtCTTRUUCtQdW5nUG14K1pENXg0djA0WXE2MXhHbGVEcWFWMFdSTVJBOUdHdXZEY3AyQThzcFBBSnROczdERTl6UEI3WDlhcVFtUVVVdE8xL3FyT0dhS3dVcHZHQ2c0dHBOZ1NHeWhPU3h1RWx4QTJKcW5DM0pkVlNVUkg0SHJDbVJYUCtIQm5wMUV4VUZwdGVRY3ZXMlQwOHpsVUE1UXNsbkJhaTM3QTlSZ3pRVXBONC9NemJEZ1NuY2tpZ25QTTkySkFZc1RMeGhVbUtKNGgySlNGenRRQXhFYkd0YUNMWlZlV25iT2w1c2cwWThYRXhuTmkxUFFkcnRpbXpLOVFJRlExdHNUYXM4MFUxcURmS2RNcjB3UnpsWFd3WS9pUUJaQ2V5cWxsMHo3d1N6Wm1QeWZHODRSV1hpNlNwajdYd2E3bnVvbUlDcGk0eXNWc2JOekdudFcrTnlHTldNcnpIUWZ1ajhCTkhXYTNnREdmYjNrSG03aDJ4Z3c4Vk9LZEV0dFh1dlh2QlQxdHo2b1VvdndES2Z3Q01yWmRtQlJaSDhNNk5mRmtoQ3hBWGpyUXV1SGhzV0Z0YlpkZG9kQnVjYkJHM1BST2d2OTh5TEJqekQxUkMvb2Via2tHa1FiZ2pnWUk0NXowYWhZYVduRXEwYmppMS9ES3JUeDFNZnEyQlZUWktlRlFkbkYwVWZQelFJVUd5Qmg4c05CeGEyKzN1aE5PM3c1TVQ1QU13dm1Na0tXb2RxUFg5ZHpscHRxSGdZVVlacGhJZHFRMXYvVlhWMEI2MWJDMGZUNEtBZEY1VHV3VU9TTWczNkVGSDVsZ095OGt6NmhlVVp0TzhWT3MzUXBIWEZzQm0zL1BSZE9Gb2liUmV5TS9jUFZ1M3p0THF2amVtVExlajZoNC83UUJFUEZIK25xQzM1by9mM0F0VFVkSzZqSE85Rk9ERHhFRGxJdHA2aHFSNTNIaG9Zc0R1Q25mdGtYOVFYM2hwKzY3NFY0MzFCYll3SkZ4aEl3WE9xQ21NdlJ6VnZHakI3T2s3d1hkSnVPK2FTMDJrODRVWFZYUmJyYUovZGl3SkdVbk1wYmMrTmZZVDh6NzQvWTkvUlVVaSsrcnZnUmVqSFVqTHRvMkRmMVBNcmRnQjE3ZWVMeS9UcE1QNzZuejU3MlR0QzNLZkpiMUJMQXdRVUFBQUlDQUJObXRwT2xnQUJZYjhRQUFBVExRQUFId0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzUEZXb2Q3SE1kMWYwdVVCVTVIbTZJRVNTQmxOZG95U0JHODdRVlVaWXVnZ0tSRTBsUW9LYkcyZ2ljZjd1QzdBeVU2anUwa1RuRjZjeElyMVhJU0pYSnN5MHBDUWxic09EMXhtdE43cjM5RHZpOXhmbTltOStvZURxTDhmUUY1ZTdPemIxNzl6WnMzZS9PRi8vM001NGpJb3Y4cVVZWENFa1VVbHlpaGxGdXJKYnBJMVJJOVErOHFVWTNXWnFsT2pSS3QwN3Y1dHNrUFdrelhacm9Odmx6aXk3UDg0TGtadWx5aTk5RFg4dVc5UE9qclN2UStldjhNZmFCRVgwL2ZNRXZmU0I4czBUZlJOOC9RdDZqMHJTWGFTeCs2anI2TnZuMkd2bU9HdnJORTMwWGZ6WmZ2VWVsN1MzUVg2L1o5OVAwbCtnSDZNTGQrOERyNklmcGh2bnhFcGVlNSswZjQ1a2RWK3JFU0hhUWZWK2tuVlBwSmhhYnZyZGFyN2ZzVm1sallmMTZoeWFPTk9GSG96U3ZWZW5KcVl5MU1tdWVDc0lhZTNTdU5LS2lkRDVwVnZzODZKOXNYcXkyRjlxNVVHNVgxV3RCT0c4MDFweEluYTQxS0s2cWNTMXJ0d3lCYUM2cDFoVzVhZUhMbG1lQlNVS2tGOWRYSzJYYXpXbDg5TEVRR3pWVXd1YUhnc1VJek5SWjdxdkdzUXZQeWVidTZsbFNFTXNlQ2RuSU9keUJUcWhBZ242OEY3WXVWSTlYVjVYbzdXVTJhZURoUkh4eitSS09leEQzRGQxUXh2cHkwTHg2dFZaTjYreDFuVnRqZ0FuV21uazFDOHhtRjlxdzBtcXNWY1ZOWmJ6YmFqYWhScXp6T3R5QzZMbW9tTWRoVWd4cnN1cTJITkdwZVhtODNLa2U3ejBFK2ZXVDUxRU5uTHJBQ3o3V2JRZFErZmdrUEZYcDZvV2RrRUZZcmNkQU8ycGZYazFaRlVCd2VWckRBd1FNOHhNanpRVzBqWWRGVGw3alZyMk8vcEhPNHNuK1hRWnhJdlc0Zm81WkNzN1hHNnJuR2VqV0MrU3JhOEhRQU85dFoxMXhTajRDeVdKQ2ZyYTdXZy9aR0UxcnNyTmJqNUxra2x1b3B0RXVhczlHdTFpb3JWWUdsWGZWR2ZibWY2dnBzMUtOQk0xaEwya216eFZEb0F5dVV5d0NyRGJDOGQydkQ3NGZJMDJPR01PR1pKRTJhc0NvWnk0ODU3anpiRHFKM25ReldoVklxTGFuMFVaVmVVT2xqQ3BYT05qYWFVWEtpeXRyTzhndzZ4T0xMcEpHdTBrK1Y2UUg2YVpWK3Brd3YwcytXNmVmb0paVStYcWFmcDArbzlNa3lmWXBlVnVuVFpYcUZma0dsWHl6VEw5RVZsYTZXYVpOZUxkTm42T1V5dlVhL1hLYlAwdWVZMGErVTZmUE01YlAwcTN6N0NVaS9qTC9Ga3ljWDQxaWxYeXZUcjlOdmxPazM2YmVZdzIrcjlEdGwrbDM2Z2tJSHo1eDQ3RXdTSmRWTFNid1FYbTRuTGQwNXVGR3RINm9nMkhmZ3IyM1l6c0dXUU9CK2xYNnZUTDlQZjZEU0g1YnBqK2kwU2w4czB4L1RueWgwODhWMmUzMnBVdEZkNDVCdUh0SU9HZHFTWjF1MlF2c0taaGNUVng3RzVXelN2RlNORW5ZSmRQclRNdjBaL2JseTY0T081bW1PWm1tMllWcWVwdHVPcm1tNlpydU9wdUZKR3R1aGplY2FudGtXdm5WSEMvamV3SmVwKzdwam1ycnJhemFQaTVNRXZERGVOSGkwNmZNMU5kT2tLNE01bVNCaEtzKzFYVGVDc0d2OEV6SnN6WEpNelVzc3lFazlYYmNFNThoMklkSFU3Y1JNb0tMbzFlRWkwV3RHYVdyRmRpUjZEY2VRdlo3bnVWWm9HTEkzREdSdkdEbVJIVWFTcitrbHNqZldMVDN5VFUvMGdxdnNUVjNUOTZOQWs3MXVScHNHV3FUYnV0VEI4azFRaDEzZmRuM3Vld00rUjErVWVkNTArTCtod2I2TU9rajdxVTFieHNicml3MUxqQ3piWVlud3Z1NXBudVhwSEFVRDFFd3J2azBlQTk2NjVCM0Q5alRoTVdtcU96MzBvSUVQRE50Z0x1alh1ODk4M1lac1cvY3puajd1UEZOdzF1d1FyVnh6WFdkdllhVEc0OEZONi9CZzJXbksydHFhL09lTEQ5TXlYNTIxeWJoWUlwWVliYkpVSjdNQ1hCaGNqS2pNQS8wYU1tZmZ5cm5iV3U0VkgzYjVRR3BQUE1CektCNjY1NDJJaCs2NjI0eUhIYVY5OFhBSzRpSEdkdUtoQjhhSWVGaE9PdTVQU04wV1ZROWZjMmllTzhNOWhiaHdyaGtYaG1GdWdRdERDN2VGQ3dOUHJ4VVhUaGNYWTdCaE9Na1FOb3pBNmNXRzA4V0c0ZGxEMlhRQUdaNXUycUIzb0poQWxZWjdINUxSSS9UZ2UzQnlZVitHSGVGVDRFTzMyZS9zWHc4ZmlVcjJTcisra1ROT1g2OUgzemp1cFM3UTFzaTBOWWEwMVlWdWh1alJ1eEh5UkV0NFJUeHpyRzdXNytBY25IdmxNcVdNSGJkeUdpUHNvOUZZY2g1SHo1THhoc2N0SHRFbnhVU0hLM2xZZmZiNUVwTUNSNXIwUDhmYzBuTDBDUno0bVFXOGh1RzU2UnZTdnQ1WmczL1ExYk5Nd2QwM1dDZjJDK0tETzk4V2Z2Zk51RGNEY1R3N2NUTDk0SFhneWd6MThYRWF3SlNlUjhUcDJMTlZSQkpqZkVSUzZ3MUh4TktkLzhlSWhQN29pS0MyR0lxSTVVUmM2MmhKLzF6Y3hqeTB2T0g0WnR4MHExK3VudzVUQnA2Z0RIcmxEdVpsV0djZ3U0M1VwUUFsOEpESTd4M2ZTWjl6Q3pKMHRDem15cGp4NFV0dWRjWWJjdDdMMmliMXgrRFJrbkpZcjY2Y1hLckYzS0cvSVZZSXJ0WjRKUHVWVjBiYjhoeFlKUEtPWEJYQlNGU1pNRXprSXRZUjNnUm1HQmZRazJlTnhkbVg3NWdNOGViS3hiSU56dlZBQXNhd0pDREV5UHh1KzdHbzJuaE5ZWi9iTHM4QUlZMjFzaTFHSWI0Tk9hc1lUOWtvUjg0UFg4d3VUWk1ZNUpiQnExVUlHMFhsSlo1bWMxQ3UrVHdQbUlmSEs1Y2g0eVZXTk1FdFgvT0d2UWw3bkNKL1pyNlUwb1VmZmN0SEZtQzBNNTgweFVoVGVFelA4YjR0VkpoYm93S3hFNTh1SHhFUkkwTUh1c2VnWTlBYUlTKy9nMFU2ZTBkWXBZc1ZQa2VJSVdLWUk4UWNpUkNlRzJZUFFteUJFRnVUNCswZWhHRDJvQnJYQktiMEFZUTRRZEtIRU1jenQ0RVFIdlZHRVlJWWJvV1FRb3hnWithN1JYN2x6SkFqeGRlTnJKb1NIdVc0aWpaUTQwRmJWNkpHclBpT3RGUlFXSDE1d003bDk5YUkyTzFvWTFCbWJpLzM5R0JLNzJES05ZMHhtQUxvaXF6dnpoRzd6NG9NT2E2ZDlQUE5jMjBrdk1UNEtNSXZlMGhnUU5aRkdtY2R6Mlc1cUFCMW1kV3c1elVrNTZ4ZTlyUnM3WkFjd2RQajJwK2o0NFdlaUIxb2ZhNkdUWk85eTIzNTNMZXpjU2I0R3h4clNIVkU5VzBOZU16aVhPRnpsV2JyTHFqUkV0bVU4NkxvUlkvSk92Sks1Z3ZmSmo3N1hlWlBPUk1FSnJFQ0dZR3N4Zk42VHF4Q1pwNm54UzdGbHpzR3J1ODcxUVFVa3ZzWStGbThNYkJsWlRqRXdkWEc3VmZrdEpKWTdMTVU4enRiQ1F5NTBtZnZKdUMzRE5WNkYrRkNsamwyYzlTN2t5cGNiZnNsYVVYMS9TQUtSMlJxdWNQcjI0MTdnUzY5cGx2eVBwYVkzK2JhMmovTHBaemVLSFUxRi9QSHlOL3ljS3pabXQ0cVkyQm11YkxPa0JpVk5TRlhZaUtLdHNCblFYM0M4OTNYWFJTTnBwYTREbERrYXJvUjZ6cFVSTFlKUW15a3NkZXpUUXMwdWh1bG1wRWttbTBhRWZKSWJNVlJiSm1oNzJwK1QzWGppQlNQWGJKczhUdVdubHF1VUhmckRXUWQzeG0zUDlLSzE3SXhXY2YzL1d2SU9tNWgxdkZFMXNHS21MY2xMakhXN2NrdVRwWmR2SjdzMHNrK3ZwWHJMaXNtcmpmQTN4NlJYM2lud1Y1RDBFQnZaM3R2NkRLVVdRSzVjL3d5WnBiQU5Jc3ppNmQzZUppZW5uUHB6eGQ1cGJDOXJOT3BuWGptdTJJdkliT0xLV3pOczB0bmxnM2tDNHN6d2V2Sk9WbDluZWVXd2VqN0hQMWhKSGRyYXNZRHIrNitNK1JEcm43MTNBWXZ3N3ltWi9jVzRpWHJHTU9MZWFZTCsvaU8vUmpJdkNKM2tmS2RvZ2NJd0Q1RHpFQit5Mlo0bnVoeGVlVnhVenNNZE04M1RRc3dDSk0wQWFRYzB3M3N3TFNzQkQ3RjB1aTREalkrV21BblZoTDVwdVA2aGh1aEJFbVNNSFd4V2tYNEpQakU4dU56cnVlcU04TVJvOTBYNk9YcW56OTliNWhDOGY1MzFCdW0wSXkyOVlhSjY3UnJmY05rajM2LzFNbGU5dUJlbEJFbGtLVDVCUldXS2Q4cmg2SDd1aXNoZlJzNUtVek1jWHU2SElFamQzVkFGZWNsZ1M5VFpodzVIcm1HczRVSnRPVnJodTN4S3d0ZGk0d3NSNGlJMnNQNVlkVDZ0L1U4S0ZyL2hNd00rMElYWGV3aUdMOHlaN2c1MW4yUnp6aXJjT1VtNWtlZXdReFo0N2xwaE9wRnM4TEVjMXpOUWYwYlI1SG1HRTRhV2w2Q1pTTzB6VENLb3pTT2tKdkRXSFBTMkFxeHd2bUJGME5rR0dPKytOMlB3SGUyRXZXalhLNStoVGlQSW04TG5FZWh0aTJjUjZuOTVYL0RqbHBHb2h5enRnL2htdGo3eUxiUjA3WUtmblBDRTErVHU2azh4M3BDdjk1OVgvYk9tbmRMVnRGK3EvdHVTZXdDMlg3czhUcTd1aGlWaVN2dHp0Nk93d3Y4MndYWHp2d2NKVjJtZ2FiTGVvbWZZTStjUDNYbG13dEJrNjlUb2gvck9LL2xkbmQvMkxQakE0MGJaeGhITzdEa0xsMjBQZGt2YlJlendlV3gvTTROY2pNSlFmNDJUcGZyaFloNXpMdlBOTUhDYXp1R0crQ2ZZV284NlRRek5DSXo0TmN1bG1NWkJyL0U4U0luTk8zWU50SWtBaGpzVkV0U096VTFaRi9Ec3RJd2NnTXJ0dUFjRFVrRkRsWklPYWpTUjh2MEYvU1haZm9yK211RmJ1ais4dnRRc3hsYzVwOS9WWHFoVEg5RGY2dlMzNVhwNytrZnl2U1BmUE94TXYwVC9YT1ovb1grVmFHOVcveENYS1ovbzM4djAzOHcvL21Sdjgzemo1di9DWUtSNXlvVTJ0WDlyZjkwK0V3UzlYZkpuLzhWZXN1V3Y5VXI5S2IrSDdjVnVubkVJUXRZdGJCL2l4TVl1L3BQVnl6SEN1MXNYVzYxazdWalNScHMxTUQ2eGo0R2tvclBQd1J0Yml1MHVERDhlSEJFNzZtTm0wYzhVbWkyM1ZpdXQ5b0JXempYSnpYcnh1anJoem9WS3JjYng5Y2IwY1dUMVZxdEtvN0VQQUsxaTQ2VktLU0tzeE9uVTBScDRaSDlvODZlOUlaRWVBTmNHeHVzbGh5QkFEK0tTTFVScnlSWU81eGpycjhid3RiNXJsWm5jMVlHQXk5TzBjeldHdlhWOC9JNFI3bVI5cHB4VTBlL0FSZk1OdEtPNlE4dUZKQnNIWTlCQ093ZGltOXZ0TlRWSkl2ek5ZZ2FaSFpYOXhIUGphQmR5UitlRUxkdGpoRE1lMVEwNFRadm9laHN6SGd1akUvNVRDRy9WMitFY3IzUkRHcVlqYkx4VUJRbHJWYWptYlB0UHpnMFZ5UWZZYnV0Y0lhZk9mSFlXVXpValJha1g4ck91ZXhiMlA5azhUbXJEalhMR1RwczlIRFF1cWhRcVhVeE1QT2tjUGRvWi9ScnZiOVlYdkp1YU5TR2p4N2JhRUJ3dFZIbmN6aDhLT1Q0MGVQTDU0OGZlK2Z4ODhkUG5WTm9UMEdDT3k0Ty95QTgwL0lZa0VMbXVJTk9oYnJkTXVvRWxrSlQ0VWExaGdSMDM4TElZMXJaSVpLKzgxRkRCN21tV3V1MUtnTC85aUovRlI1WG00WnJ4S212d21uNkJISVdac0dwemhtbTNqTkx1L1BaMDN2ZWFWKy9ZMDVzMUNOMjk1bWt2ZEdzSDB0eVQ4YUo5S1JWb09nZzB3SXBOMEtwQW8wbVc5WDNKQ0lMTHVNS0dqWnJlZit3WVZCZWF0QjdORXVoMDBYYWJMRTBEaDFXR3pxR05oSEVNYytFUVJPR2JEeFBkOUlocWhEL1RaRENwNmR3TlhCWHdiZUM3NmtEVjBuNU5Cbzd5TVIxV25UZVNoYXVaVWxBTmpuNG5pV1hQRGxZV1FPeldmUjlhcE4yck55elNSTlhhUElLVFYyaDZVMVNUNzVDTS9kY29WbDhIYnhDcFUyNkRnU2JWRWJYSnUwOHRkZ2hYSm9FeWFLa25KK1VwTGg5MHlhOVdYWnUwaTdaMkgzOUp1M0dveHV1MEkyaWYyN0N5SjdjdEVrM3k5NVg2SlpObWtkNzk1NmxxZGRvNzRYNXFhdDA2eWE5WldsYVdWSjMzN1kwMHpYekVkcU42MjAwU2JmVEhOMEJnKytFUi9iaDJWdnBBWG9ibmFDNzZVbGFvSmdPVUlzTzB2dnc5RVB3M29kQjhSRTQ1MFU0NVNXNDVaTndDcnZxS2VrTzhta0ozNVAwY1RwTTk4SlpjL1E4M1VmM0M2bnZCZWNINGJnSGFKMGVRdDhrT04xRVIrZ29YUHdpemRBeE9nNzN2NFM3RS9RVnBJSzNRZy9qNlF4NEwwTmo2ZnIzWTF3Sk1qYnUyWDM3RmJyajFBSFl2RFM1T0dHd0IrOThucWFVbDEranV5NWNwWDFMVXdjUFhLRzNidExibHFiUnVIdEpuWEJtNW1ibTFWZnA3UXE5UUFjVzUyWW1uemJtMWJtWlYybGhCMzJlOW0vU2dhWForYW41MlZmcG5oMzArQWRubEJlLzlNWFg2Q0JjT1Q5OWxSWmZGc2F4QXcyZ2cyQ3NDa04zd3NSYllOQWVtTFVQQmkzQ0ZCUEdISUVoRjJCS2hIWVZCckNqVWloL0FaK3ZwQldZNVlEdVBqb0pFMkVRbmFMVEFxZ2I5Q2pNVmtUck1iUjJRRXFkemtEYUJHUmRwTFBvbTRTa00zU08zZ0YzTGNKTjU5R2FCcmNqOURoYUtuMFZSdDhCZWtsMW9VTjFvVVAxQktpZUJOVWhtdmdmMnFQU1V5cDk5WmRvTDgycTlEVm9pdjlQaWVzNzVYOG85Tit3VzZHbkJZeUMvd05RU3dNRUZBQUFDQWdBVFpyYVR0M2RzMUZSQVFBQUxBSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE1TG1Oc1lYTnpsVkhKU2dOQkVIMGRZeEpqM0RVcXVYb3dpazVBRVZ3SVNqQWdSTUZFUE9UV21hbkVEcFB1MkQzajhsbWVCQTkrZ0I4bFZrWlBJcUlOVmErVzE2K3I2TGYzbDFjQXUxakpZd3lMV1N4bFVSVElIQ210b3FwQWVyMWR2bWFvbVlBRVpocEswMFU4NkpDOWtwMlFLL01ONDh2d1dsbzF5citLNmVoR09ZSENtZFprYTZGMGpqamRhaWpqRFVNWmRZMGQ3SGtCRFl6bmZLOUp0ekc1cUc3c1pXd2lHU21qM2RyK29VRHFvU0lnMmdJVExkWFRNb290U3g4M2pPMTU5OVRaNlh1eW83eXJ4eUUxcVV1V3RFOUgzNXFCWkQwbU9POGtDQ3c1ZDFobDNYekx4TmFudWhxTnV2clQ4OXQ5ZVNkNTIxUHRoOFlwM1R1bjZNWUVXU3dYa01hNHdPWS9OaEVvL1RLeVFQblBXcWdneFo4ME9vS05KMkhNY0hUQTlSUmpacVAwRFBIRVVRclpVWjd3NnNpeEwzNHlNSUhKUkNHREFxYTRuOFowd3AvQmJJSnptRSswRjlqbkV4UEpUU0QzQVZCTEF3UVVBQUFJQ0FCTm10cE9FL1NieG1FQkFBQldBZ0FBUndBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa1UzUnZjbVZrUkdGMFlVTm9ZVzVuWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenBWRzVUZ014RUgwT1IwSUk5OTBnZ1NpQUFoY2dHaEFTQkpDUVZpQVJsTjdaSFRhT3ZIYmtkY0wvOEFkVVNCUjhBQitGbUYzUzBFQkI0VGVIbjJmZWpEOCszOTRCSEdHampqRXNWN0ZheFpyQW1IR3B3RUhrZkNxZnFIUFlrMzN2Z291ZGtiSHpKRE1LWFpmazBsUGVkelluR2JuMFJLRG1UTkpXWmtBQ3ExRlBEWlhNVk9qS0M1M2UyRUFwK1lKajZXbkVtVHpWVm9jemJyZTcxeFlZYjdxRXMzT1J0blE3eURya0gxVEhjR1l4Y3JFeWJlVjFFWStTNDZHcmM0SE5WbUJCeWFVS3F0bFZOcVhrYWtnMjNJK0VDVFJ1ckNYZk5DclBpZm5OU0R2Wk55bzhPcDhkeTRReUovTll0blRXTjFUVVVpbnQvRjZUaDZpMzNNREhkSzFMZVQ4ZUh4UnpOekNGZWhYckF1Zi9iaWN3WDY3UzhKVzg2L1FvRGdMYmY1ZkZGaXI4cCtERDI4SUVlN3h5VkV0YkcxbFJDR1djNWtpV01UQ3gvd3J4d2s0RkRjYkpNdm1NR2NiR053R3pXQ2p2RjB0Y3dqemJva3dGSzVqRDFCZFFTd01FRkFBQUNBZ0FUWnJhVGhDZnpNOVJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTBMbU5zWVhOemxWSEpTZ05CRUgwZFl6YWowYWhSeWRXREN6b0Jnd2NUZ2hvVWhDaTQ0TUZiWjZhTUhTYmRzWHZHNWJNOENSNzhBRDlLckl5ZVJFUWJxbDR0cjE5WDBXL3ZMNjhBNmxnc1lBeHpXY3huVVJISU5KVldVVXNndlhLMWVzblFOZ0VKbERwSzAwazg2Sks5a04yUUsrV084V1Y0S2EwYTVWL0ZkSFNqbkVEeFNHdXk3VkE2UjV4dWRKVHhocUdNcm8wZGJIc0JEWXpuZk8rTWJtTnkwYUd4cDdHSlpLU01kc3YxaGtEcW9TWWdyZ1R5NTZxblpSUmJsdDd0R052ejdxbTcxZmRrVjNrWGowTTZvMnV5cEgxcWZtc0drdldZNEx5OUlMRGtYS1BGdW9WekUxdWZEdFZvMUtXZm50L3N5enZKMng1b1B6Uk82ZDR4UlRjbXlHS2hpRFRHQmRiL3NZbEE5WmVSQlZiL3JJVWFVdnhKb3lQWWVCTEdERWM3WEU4eFp0YXF6eEJQSEtXUUhlVUpieDg1OXBWUEJ2S1lTQlF5S0dLUysybE1KZndTcGhPY1FUblJubVZmU0V3a040SGNCMUJMQXdRVUFBQUlDQUJObXRwT2NadEprTklEQUFBN0NRQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjNjFWNzNQYlJCQjlGOXRSN2FpdENVa0twYlNsTmFuai9MaVV0SVdTRUhBZHB3MVZISWlOUzRBWlJwR3Vzb0lzR2VtY3BIOE1YNW5oVzJGb1MyR0c2V2YrS0lZOTJjUzBNY1FaYW8xUDB0N3V1N2Q3ZTA5Ly9QbnI3d0N1NGFzMFhzRkNCcU80bHNaVlhNL1FjRVBEdXhta2xDV0Y5ekxJNGVZSTNzZWlocVVSWlBDQmhtVTE4NkVhUHRKUXpCREVMUTBsRFNzYXlnekRzdUZHdVhtR25PRUd2T1daOG40UU5tOXdXelFESGxtODZqWmJucWpLSURRZHNVaitTNjd2eW1XR0svbEJBcWJxRE1sU1lBdUcwNGJyaTBxN3VTM0Ntcm50a1dYVUNDelRxNXVocTk2N3hxUWl4S0N2K2I0SVM1NFpSWUplSndkWUxIZWQrS1hNVnN0N3dIQmVHWVc5WWtxejFEQjlSOWpsWGVITFRSRzFBaitpZGFLOEVZUU8zeFBiQ3p1OEZRWXlzQUtQV3hURW0wSTJBanZpWWRlWkc0R3pPRFVJZy85ZWxPZ2x2TUJobUR2ZTBnd2pRdUhVVGE4dElnMjNxWFRsbnVHZUt4dUdnaTM4QTFidTgxTGd5OUMwWk82d0wwR2VsQTlhd3U3Vm8vUlM4cHZNR3p2bXJzazltdVViMnp2Q2tsUzVReWFHVEhuZkVpM3BVcHlHT3d6cHF1djRwbXlIUk9YN3d3R0tYQ2dvR1hkWDdQUDdiZCtLUS9scTkybnBlQlY5Q2JrdXF5U3FRVHUweEtvYmQvTno0WE1xQldyNnNtOTVRZVQ2em5yTVE4T2Fqbzl4VjhjWXhuVk13TkN4am9xT0RYekNVUHpmdEhTOGhVczZQc1dtaHFxT0dqNWpPTmNyamJudGNwdEMxZDVIdkVhampqcnVNWXpGRlcrYXNzRnZ1YzZhTDRValFoMmZZMHZIRjloaW1EbE9mWFdjeDBXU2xFSE9MRVAyeGQxbXVIREVkbXY0a2lFL2FMY3p2TnBiNHFEdkdDNGR6WStFSk9wYjhGVXYyT3NJbGpHSWtIeExiQ1F2eXdiMWloUmhSMDE2R2Y2TnBoUWlyelR6VExXMnNWbGVXU25XaXFVN3hjcnQ4c3JYNVhxNVVxUFNHUCsyblRFdjFaV21aWW1JUkgyZVpQMjdnV1Q2Q016akt1VXhaQ2pyQ0xubTIySmYySjBwT2tqNXJtSzBwZXR4dzQxVVVxZWV0MUNkS0pCaFBML1dWMTVPMEd5TVI2MmQ3KzhSZUhiWFk4TG8xLzNLeHhkN1haL3h2am5oSW4xT1IwRU5CcGJOcWpOTkgrb0UvU2R3aHF5djBkTXlodWdDTW9YcFIyQ0ZKeGo2a2Q2RzhEcU53K1FET0RnYlI4UmVlQU52QXZHVFFtTjAwVm5xWXYxQTJFbTZyeGQrQnZzSmllbGZrRnovRGFtdEp4aXV6QksrTmp2ekdDY1NUNUVld2pOa25tS0UwVjEvaEpQeFJQTHd4S25aaHdkMHpoSWhZQWM2dnFIRlBiSTE4UTU4M0VVUVV5eDBGaitndUs3RWhxanBLT0l5SmdsbEREZHhCWGtrc2tXaVBVVVdSWHVoVzRKMFlmb1pUajlHOW1IZkN1anhjN29MWDZCL2tpelROTTdFL3JPWWkrOGM4L0hjVlNKM0xxYWRvRjNvL0ZKa3ZVQVlPYXppYmFUL0FsQkxBd1FVQUFBSUNBQk5tdHBPQ0swYVRFY0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QTlPS05BUnlqS1dCSUtMOHAxZm5sK3Q1WGJYWE1mS1lqUElaWDc1SVpra2hvT0pJTzhnYVRLNUI1YjhTK3YxUkJKTlc0Wkd0a1RMYzk0UWRRU3dNRUZBQUFDQWdBVFpyYVRoeit6dHlnQVFBQTV3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjNVZTUVU4VU1SVCt1Z3c3N0RyS2lvZ2lhanh3MkFXelJUUmNJSHRnSTRsbU5SSElYamgxWng1RHlXeTd0aDBOUDRzRE1mSGdEL0JIR2QrTUhvd3hCdEswNzczMisxNi9yK24zSDErL0FYaUZweTNNWWFXTkNBOWlQSXl4S3RBTVo5cXZid2xzanJTVnMwS0ZVK3VtT3pLanFaVStsWWYwc1NRZkRxejdVTnFnZ3JiRzd6SnRUeHNkQmdMOTdnMTR2YkZBTkxRWkNTeU90S0gzNVhSQzdsaE5DdDVaR3RsVUZXUGxkRlgvM293cWVRTEpHMlBJRFF2bFBYSFp2LzZkNjl0YkxMZDFwSE9qUXVtNDVkdVJkYm44VEpPWDUxSk50RHkrbU5FaG5aSWprOUxlWDRlWjRqNE04REluVnFBQ1pYTC9JcEIvc2JNNzRNYnRJMXU2bEE1MEpYYjFYd0w2NStxVFlyK3ZUVnBZcjAzK2pzS1p6V0k4U3JDR3h3bm0wVXdRNDRuQTg1dTRFbGo3ancrQjNyV2JDU3prRktxYWFkM3V5WDd2ajBlWU9SdHNhZ3VaV2tkTW56SnFxSXFDdmM5MWUyTTg0eDhWOGVjU25VN2xwTXA0eGxqZzJPSnNnQVlQb0wyeGVRV3g4UVdOUzY0YWFQUGFyTEVXdDNoZCtZVkNnanRBbmMzWDV4RVdhM3dIZCt1NGhIc2NJeXpqUG03WE9CWlNNL0FUVUVzREJCUUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpjdVkyeGhjM090Vmx0ejIwUVUvamF4bzloUlc5TmNXa0lnWEVKd25JdENBZzJRRXNoRkRnYkZJWmU2bEVLTExHOXNCVmx5cEhXYVB2UEdJODlNbjNqaHJUQ2twVEREOUprL3dneDMrQUVNWjJVVDA4U2R4ak94ck5YdStjNStlODdSMmJQNjhaL3ZmZ0R3RXNveG5NT3JjWnpIYXpITVlEWk96VVVGcjhjUmxaSW81dUpJNFkwdXZJbDVCUXRkaUdOUndaSkVkSW1rRlN6THdWdXl5U2g0V3o3ZmtZMmhZQ1ZPNUZrRnF3cmVWYkRHMENGS2RqQTB5VEJxMko1V2NVeXg1Zm5sQzFxQmx6MHRzTFIxdmxQbGdVaDcvbHJWRTZhd1BUZVlwV2tYYmRjV2N3d1R5UmJtamVRWUlvdGVnVE9jTVd5WFo2dmxQUGMzemJ4RGtyT0daNWxPenZSdE9hNExJOUk4QmpYanV0eGZkTXdnNERTY09QNmFRMU16Wkc3VXJGU2Ntd3o5RXVEcjNPTDJMaS9vdTl3VjZ6eW9rQjZ0dFpzMFBMK28zZUQ1NlcydDRudkNzenhIc3p5ZmEyVXVTbDRoMFB5NnNtWjR4ZG1SRnF4NCtMcGtYYnZqRmFWVExhM08wTVVsVDg1MGFEa0ZHeFJCdlNHNGJJdVNJV2xULzZNVmU5cWk1d3JmdE1UUVVWMmlQQ1Z1Vm5paEVaTDBTYms0bkRTMnpWMVRjMHkzcUszbXQ3a2xLSDVIUkF4eGZjL2lsWkJSd1NaRGJNTXV1cWFvK21UTmwwY25TUHQ4VHY3UW9udmFWdFcxd3FsYXV0NjcyRnBRVDhiZE9lbkhobGYxTFo2MlpSWS8zb3hoUWpwREcwRjNMY2NMYkxlNEVscWs0SktLSEM2cjZNY1RLZ2J3bm9vcmVGL0ZWWHpBc0hRU0JxcDRBVWtWSCtLYWd1c3FQZ0taTWRDSWs1bTN0WUpKTkpRTGdiWkpyWW84TElaRUkvd2J3aWVMVlJSQTRCYXVNYlJkWFZCUnhMS0tFcFlaZWtMZHNpbEsyb0pkekxpQ0Y3bXZ3c2EyaW85Qk1SbHI1Y1dvR01Jd3pXbGwyejlnYnkxZEdBWWZrUzhLSElia2NYY01RM2RqaVlQRVpSZzV0cDFVa25hT3ZLZTA0OTJvbFQvak9DVXBaTlYwVWFKa0U5eXYxYVdHay8reHlVS1RsQlc0ZSszUzZxYStyaS9xbVp5K2RGM1A2Vm5hYUlQR3d6SWd0RW1tdEdsWlBBaUdwaWZwdVBpaWxici9DT3BXeTI0TEJTMVI1Q0xqRnZnZUw5UWdxcExKZXVHcEN0dlJERHVRdnAxK1VFS2hvb2tNdmNsTTB5clZTV2pJUjRtZWJLNFJWT25Jc2JrdkQ3YkQrNGJ3Ym1MSWV1NGgyNkwrMWs2bXdLQ0VTU0Y3blhZUVZIbGhub3pwTTVydEtmbGFxM25LMnQ2bVljSFRkT0NmQjlVZ3NFUkMxaFQ2eUdpbmV3QlBrdlFwNnMyaGpTNGduaHJkQjB2ZFJkdFhOR3JESUxVZHBBUDhSQ3hBWDAwTHorQTVJT3hKTmtZWGJjNGFGK3NnN2doaHQxTGZnSDJOOXRGdkVWbjVIdEVyZDlHUkhTZCtaWHpzRGpyYjd5SFdodnVJMzBNWG82ZTZqMU1TT0gwWU9FUC9mU1JDTE5JVWV5ekVvb2V3cy92b0RvR09veXYxak44KzhHOFlNV3AvaG9wZjBJTmZLVXEvWVFxL0k0cy9zSTAvOFFuK3d1ZjRPL1EvVmZQc3dQOWJzb3lTM3lvK3d3akdpTEVIbjJJY0UyaFB6Rk5NTkpMSStFN1g0eHRMamQ1SDd4MzAzVzRhWGpYc3grcjBrM1JIU1BJaXRWT2gvalI5Rzhybnk3Z1FZak40QmM5U3I1OUNmZzYxWDVTa3p4TkhDdXNZUmV4ZlVFc0RCQlFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBRTJhMms2Nm9rUWVrd0VBQUxRQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1EwTG1Oc1lYTnpqVkpMYnhNeEVQNmNiTE5OV0dnb1VCNEZWRlZSU1ZvSkkvcTR0TW9sQWdrVU9EUnQ3czd1ZE92S3NTT3ZBK3JQNnFHcXhLRS9nQjlWZGJMMEFCd2dzand2ZnpQempUVS9iMzVjQTlqQjZ6cXFXR2tnd3RNWXoySThGNmlGVTEyMDNnbTArdHJKaVZIaHhQbnhuc3hvN0dTUnlvRWVUd3dOZ3ZNcXAzM0dIMmlyUTFmZ1RYdWVoTTVRSU9xNWpBU1crdHJTMStsNFJQNUlqUXhIbHZzdVZXYW92Sjc1ZDhGb1JrZ2crV1F0K1o1UlJVSHNic3pSckxYRC9Pb0RuVnNWcHA1TGZlNDduOHZ2Tk5vK2sycWs1ZEg1aEE3cGhEelpsQTcrZXN4VVVJRUJoY3lKTzZ0QW1UeldOcnpmM2R2dmN1SEd3RTE5U2g5MXlmeVB4bS9QMURmRkEzNndxWEdGdHZrWENxY3VpL0Vpd1NwZUpsaEFMVUdNVi96TDg0d2hzUG9QNGdMci95OGlVTTBwOEwrMU83L05PZkV1dU5RWm1UcFA4cEFUQS9XVU1UeGV0ZDBaWW8zWEkrSk5FYzNtalBQTTRodGprWFdkclM0cWZJREc1dFlseE9ZVktoZnNWZEJnV1N1eHg3akhjdVVYQ2drZUFLVzFVTDVIV0NyeFRUd3M5VEllc1k3d0dFOXd2OFF4a1RJRHQxQkxBd1FVQUFBSUNBQk5tdHBPQVRUMXVwY0JBQUM3QWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNeTVqYkdGemM0MVNRVTlUUVJEK3RqejZiSDFLUlVBRk1jWTAybUxpR2xBdWtGNHFKSkRLZ1dMdjIvZUd4NUx0YnJOdkMvRm5jU0FtSHZnQi9pamo5TWxCUEdpejJaMlozVzltdm04elAzNSt2d0h3QVM5cW1NTktIUkdleEhnYTQ1bEFOWnpwb3ZsZW9OblRUbzZOQ3FmT2o3WmxSaU1uaTFUMjlXaHNxQitjVnpudE1INVhXeDA2QW05YXN5UzBCd0pSMTJVa3NORFRsbzRtb3lINUV6VTBmTFBZYzZreUErWDFOTDY5akthRUJKSURhOGwzalNvSzR2RDFETTJhVzh5djF0ZTVWV0hpdWRSaHovbGNYdEp3NjF5cW9aWW5YOGQwVEtma3lhYTArOWRqcG9JS0RDaGtUdHhaQmNya0YyM0Q1c2Z0blE0WHJ2ZmR4S2UwcjB2bWR4cS9PMWNYaWdYdTJkUzRRdHY4TTRVemw4VllUYkNHNXdubVVVMFFZNTEvZVJZWkFtdi9JQzd3NnY5Rm1HL0JIbVdmV0JaL1g2djloOXl4ZDhHbHpzaVVFZktZOHdOMWxUR3NjcTdWSHVBbFQwbkVBeU1halNuMXFjYzd4ajIyTmZZNnFQQUM2aHR2cnlFMnZxRnl4VkVGZFQ2ckpYWWY5L2xjK1kxQ2dvZEE2YzJYN3hFV1Nud0RqMHE3aU1kc0l5eGhHUTlLSEJNcE0vQUxVRXNEQkJRQUFBZ0lBRTJhMms2ZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZFWldOc2FXNWxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM09sVWsxckZFRVFmYjFKZGpicmFyNDBKbjRjQkE4bWgvUWh3WXNpdUlrTEM0T1NqZVFpQ0wwemxkbGVlcnBudTN2aTcvSVU4T0FQOEVlSk5aTUZMd3FDbDNwZEg2L3FWZEUvZm43N0R1QUVUL3RZd1Y2Q1J3a2VDNndZVndnY3BjNFg4Z3ROaitleThpNjZ6Qm1aT1UreXBEaHplWkNlUXVWc0lKbTY0cFZBTDlSVlpUUjVnZTEwcnE2Vk5Nb1c4aUo2Ylp2OG1yOWFqSE9CenFlaFFMS29YYVRHN2VrUWFzcmZSb0hkVzFxcDRrd09kVEcya1FyeVRPMisxbGJITnl6dHhjR2x3T3FweTBsZ0k5V1czdGZsbFB4SE5UWFV6SFdaTXBmSzY4WmZCbGZqVEFlQnZjbm8vSXd5dzV6ODNUWFpPRm5LRnhpTXJTVi9hbFFJeEpWbnFYYXlNaXBlT1YrK2xEbVZUb1pNVG1oUlU0Z2o1ODladTRxYXljLy8xcFJGOXk5YzdUTWE2VWJFL3AvWVI4MjZBOXpGdlFSUEJJYi9QMVpnOC9mbFAwem5sUEZaRC82NUw1Nmh3ejhCV0FQZmpTMFl1MGhhN0dHOXhmNFM3MkRRb21nV1lMdkJubXg5NWgvZVFIemxSd2ViYkx0TlVIekdGcjhIdHdYWXhvTTJ2OXZhaDdqUDJPZGNCL3ZZd2ZvdlVFc0RCQlFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qVXVZMnhoYzNPVlV0Rk9GREVVUFYyR0hYWWRaVVZCRVRVK0VMTUxabXNFZllGczFJMGtKcXVKUVBhOU8zTlpTbWJicGUxQStDckNBekh4d1Evd280eDNSaDZNTVFiU3RQZmU5dHpUYzVyKytQbnRPNEJOUEcxZ0JrdE5SSGdRNDJHTVpZRjZPTlIrOWFYQStrQmJPYzFWT0xCdThrWm1OTEhTcDNLWGpndnlZY2U2TDRVTkttaHIvQmEzYld1alEwK2cyNzVCWDJjb0VQVnRSZ0x6QTIzb2N6RVprZHRYbzV4M0ZnWTJWZmxRT1YzV1Y1dFJLVThnK1dnTXVYNnV2Q2N1dTllL2MvWFZhNWJiMk5Oam8wTGhtUEx0d0xxeFBLWFJ4cEZVSXkzM3o2YTBTd2ZreUtTMC9kZGhwcGlIQVY2K3l6SkgzbS8xbUs2NVp3dVgwbzR1SlM3LzY5cnVrVHBSN1BLRFNYUHJ0Umwvb25Cb3N4aVBFcXpnY1lKWjFCUEVlQ0x3NGlaZUJGYitvMTZnYzIweUZqZW04TDQ0STNkbFRlQjV1L09ILzZtendhWTJsNmwxeEJ3VEc2aXY4cHdmWUtiZEdlSVpmNmFJLzVWb3RVbzdaY1l6eGh6SEJtYzkxSGdBemJYMVM0aTFyNmhkY0ZWRGs5ZDZoVDNITFY2WGZxT1E0QTVRWmJQVmVZVDVDdC9DM1NvdTRCN0hDUGV4aU5zVmpvVlVIZmdGVUVzREJCUUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTmk1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOaGd1RUEwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0FuWktrSVpxSGpienNNVWcxNVJLdWhhRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TTZEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpBbzl1VkVDUmNaWXJ6MnRKbndSeHlkejdnWVNUNVlMckNIWXpTb2ZHeCtPd3dFMGRDQTVSTWtBY0pod050TGgvYXMzbWdSY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUUyYTJrN0tJeXBtUGdNQUFKTUhBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRZdVkyeGhjM085VmV0T0UwRVUvcVlVVnNxS1ZSSHZDb2phQzdJb2lwZFdWQ3JWa25yRmtCaC82SFE3TEV1Mk8zVjNGdlZGZkFJZlFCUHZKc2JmUHBUeHpOTEl4UXFZR05OMForYWJjNzd6blROblo3Ly8rUHdWd0ZsVXVyRWRwL1JqTklWZVdDbmtNV2JnZEEvT1lOekEyUjRZT0dkZ3dzRDVGRHB4SVVXV0Z3MWNNbEF3VUdRd2w3ZzNQQi81dG5LbHp6QlVsWUZqUFJPMThVV0wxMXlyemhWWEw1b2l0TW90bXdKRGwxcHd3K0V4aG56VmxWYlQ0MnBlQm8wSnF5NGEwZ3B0Njc1NEdvbFFsV1Z3TDVMa1QxNmhkaXU2dnFzbUdlNW0vc0p2YzBIWk9ZWmtTZFlGdzQ2cTY0dmJVYU1tZ2dlODVoR3lxeXB0N3MzeHdOWHJGcGpVQ1ZEdUZkOFhRY25qWVNob09icDFWY09uSnlpaEpERjdETWN6MlZVaVZkVDBTSjBqaUpvclViY2VhR0NjekkxQWhKR25LRks2dXNpWHVCVXAxN09xYnFob3MzK3RUc3F3cFhWc25XM3hqd1hSVG9WSjRrcE5QN2RGTXhacTRESkQ5NnpyK0Z4RkFkR0pyWWd0THNkc2NMVmdUYmxPeFZmQ0VVRmhHZlc0NzFpektuQjlwOURlVG12b296Z3I1bmRxaThMV2FiNzhIVnlWbnkxOU93b0M0U3VyUktYVkJTaitCN1Z4eldabEZOaWk3T3FhNzI5MzVxUGFtMXBzMnJjOUdSTGZMYUVXWk4zQXBJa3J1R3BpRjNhYlNHT25pVDVjTXpHRkVzUGdwdW9OWERjeGpUTERvWTBPMXNRTm5LQ3l0a3VCR21wOXJsckRUUk9IY0poaDVHL2FlZzNYOGdreEhON3dpQmgycjdqOGFqMkc3SmJqMHQzZ0NIVy9mSThoazNrMHRicERtNEZVMHBZNmNDREl1U0dWMElIcHlEb3krczFQY2RzV0lWMUhZM1FoUGY3SE44dnY3Mm52V29SVWtIS0dQWmxLMjM3ZlJydHozSXVvU0JjemYrcjlqWkhzSEFibzB1NEY5UjRTNmJSdU1ZQkc2amY2QkhUUXZ3OTdhTGVmWmlVa1ltUkhMdjhPTERmeURvbmNCM1M4SVNpQnZmVHNJa1BnQ2ZiUnM1OHdNc1YrSEFUaW1hWms5S08rSVJwTitJbzh0TlZNN2kzeHZVWGlJNUxWTCtoOG1PLzRoSzRFdnNINGhHMk14dTU4Y2gyU3luZXV0L21BbnRleGFLM2xBSEVETmt6VUtiTEFNT1l4QVFjVldxL29tMm5wTXpHSkl6aEs2Z2JpRldzaGd6UWJJaVJKNHpIaTBKa2VUMStqSEU3UVRPZGd4VGtCbmJuM01GKzNMWVc1Yk5BS3RVS1hiQkdlUkNZZXM4akZlM21Na0h3Z1JWYmI0K0xoSjFCTEF3UVVBQUFJQ0FCTm10cE9tMWZIbUVJQkFBQWFBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM09WVVV0TEF6RVFudlMxYlYydDFnZUlWdzlXMFFnVkVWcDZLUmFFVmJDdHZhZTcwNXF5VFdxU1ZmeFpuZ1FQL2dCL2xEaTdlaElSSFpqWE56TmZac2piKzhzckFKekFWaFh5VVBkZzNZTU5CcVcyVk5KMUdPVDNHaU1HaGE2T2tFRXRrQXF2a3ZrWXpWQ01ZMExxZ1E1RlBCSkdwdmtYV0hDMzBqTHdMNVJDMDQyRnRVanBZU0ExWDhUQ1RiU1puL0lJNTVyYmtQZnhMa0hyZXRwY0o5b0pKN1d5dTgwV2c4cEFUcFZ3aVNIR2JxRE5sRC9ndURuallpejU4SEdCZlp5Z1FSVmkrMXN4RWtSRERaYmZ1TW5ad0JtcHBxME9NVllIT2pFaDltUzY1UFpQRHgvTnhMMmdPODlWR0d0TGM1Zm9iblhrd2FZUEJTZ3lPUGpIRFF4MmZ0bWFRZVBQWEhBTU9mcWRWQmdwYlVLK1JCRW5ueUxGL1dkZ1R4VGt3Q05ieXNBT2xNbjZudzFRZ2FWczFNKzZsbUVsOHpWWXpkQTFzdFZNR2FHcGxEOEFVRXNEQkJRQUFBZ0lBQW1aMms2RjE4azEwQUlBQUlnSkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJKMVdTMi9iTUF5KzUxZG93VTRGTENWTk1SU0Y2MTY2QWgzYWJVQzJZVmRWWmx4bDFtT1NuTFFZOXQ4blM0bnJKTGFiTHJlUUg4bVBMOUhwMVpNbzBRcU01VXBlanFkNE1rWWdtY3E1TEM3SDM3L2RKT2ZqcTJ5VWFxT1d3Qnp5YUdrdng0L082UXRDQkYyQnhGUlQ5Z2hZbVlKOC9YSlB6dkRFZXhtaDdTK1lYRHhaM3BpdDEydThuZ1dEMDhsa1NuN2UzODI5QjBFVExxMmpra0hiM1BJTEc3UjNpbEVYYUw0YUh2VWhubXdlaFVuQVlmOS9uSVZncVZBNWxEOWlKYktnVGNtT2JCUnhoVkdWdnMwenBnU21ncFpPWVYxU3QxQkdmRWpKVmh1eDFEaStvTXg1UVE1Q0pWVHJ4QW92VFppU3puaE5TbHFZYUxUcFJqYXRHYXgyZy9zK2FQQUdZTE9tUkduTTB2UFJ2QVNEcmFvTUEyOStucEp1VmErcG82WUExMm02VVVVYXBNMGppbkxRSUhNL083dmNHdkh6aTNDbmpMNHJlQTBQcytWZTdScGdxejVNR1Rnc1dJTmNOYzJiNFdtcmRBMkE3TE5wU1ZxcFBGUzhiUGxPZFZrVmZqTDNva1hwcnZBZ3M4M294VnB1L1BRa3VwOXNITk1sTlVtMDYwOThKM21mT2o3dFNMNEIrc2xiOEtJeVlaY085UnNhN0pHdm9Gc2JFWGwrWHhPOEJzc00xMDZaekptcTdzNmhvdCtMb0pJdndMcCt5RGJZTlN4b1ZicGJvVXNRSUYxZy85SHZVTjIzSnZJZzZ0Z1ljdzJNTHpnYkRORUo2aytVdko1cFU0emorTzdtbUZ4VEI5bjdQM0hRd2dCang0WDNSb1grbTVJdTlCRnNCNm5VQTlrekppa1ptREwvZW5Tc3puSDdOUFJTQkhCclJ3STJpV3YwcGhVNnc2ZnRwemQ5bHlTSVVTbVZRNVV1RE0wQk9ZWHFFekZERDhCb1pRRnhod3o4cnJnQml6N1JGVVhUS1VxUy8xdy8vMmo4b2dWOHBnSXkzam92dUQ0aTJESmZ3UmFpMjBkODZ2MFdPaTVqTEd1WWJ5eVhaT241a1pRY0l2bzhsVHpuN25rZThEZitHZ3hOZXU1THdQeldQNy9FOHpVSnB2N2xlOUgyZStDU2xWWCs2Z0pzWU5uSkNUbnhoNjFNeVZZeU1OakR2dXVhSEpIckc2ZDdLN0hibTdPNUw2TndSdXZQcW16MEQxQkxBUUlVQXhRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBQUFBQUFBQUFBQUNrZ1FBQUFBQk5SVlJCTFVsT1JpOU5RVTVKUmtWVFZDNU5SbEJMQVFJVUF3b0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBRUFEdFFjNEFBQUJOUlZSQkxVbE9SaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUJBQTdVSDFBQUFBYVc4dlVFc0JBaFFEQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUFBQUFBQUFBQVFBTzFCRmdFQUFHbHZMM0JzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUJBQTdVRkJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUJVQUFBQUFBQUFBQUFBUUFPMUJjUUVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFFQUR0UWFRQkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3RUNGQU1LQUFBSUFBQk9tdHBPQUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFCQUE3VUhSQVFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlVFc0JBaFFEQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQVFBTzFCRXdJQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDFCTEFRSVVBeFFBQUFnSUFFMmEyazdZODZmQW9nRUFBT2dDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVzBDQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWOEVBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1VvR0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbXBzUzZzMEFnQUFHZ1FBQUNRQUFBQUFBQUFBQUFBQUFLU0Iyd2NBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSkdVVk4wWVhSMWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVkVLQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1B3cUJOb0FFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dVUU1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1RRT0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnU2NRQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVPRWdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNFVXS2tCRVJ3QUFFbHBBQUF2QUFBQUFBQUFBQUFBQUFDa2dhVVRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUU13QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tmk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2dWazBBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazV5TGMzOVJ3RUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVlkyQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25BdDdZUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dlMDNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTFMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVJM096NUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCZ2prQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaStNdk9CUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0JHVHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNmhaeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2diSThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG9uWUFyZ2tEZ0FBalRNQUFDZ0FBQUFBQUFBQUFBQUFBS1NCUno0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJR3hUQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFBQUFBQUFBQUFBQUtTQlNrNEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG4yQ3F2dWtBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCT0ZBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaFE1RkZmYUFBQUEwQUVBQUJFQUFBQUFBQUFBQUFBQUFLU0JMRklBQUZOcGJYQnNaVk4wYjNKaFoyVXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUckpmRzNWWEF3QUFHQWdBQURJQUFBQUFBQUFBQUFBQUFLU0JOVk1BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtZ3lJYWRJQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQjNGWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVSOVh2QkhBUUFBSVFJQUFERUFBQUFBQUFBQUFBQUFBS1NCZEZnQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFBQUFBQUFBQUFBQXBJRUtXZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0VwTWErS0lEQUFCcUVBQUFHQUFBQUFBQUFBQUFBQUFBcElIOFd3QUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5c1VFc0JBaFFERkFBQUNBZ0FUWnJhVHBZQUFXRy9FQUFBRXkwQUFCOEFBQUFBQUFBQUFBQUFBS1NCMUY4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMVJsYzNRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE8zZDJ6VVZFQkFBQXNBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSFFjQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ1hCeUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0UW44elBVUUVBQUN3Q0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbkdiU1pEU0F3QUFPd2tBQUNvQUFBQUFBQUFBQUFBQUFLU0IxblVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNElyUnBNUndBQUFFd0FBQUJLQUFBQUFBQUFBQUFBQUFDa2dmQjVBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOXdiMjB1Y0hKdmNHVnlkR2xsYzFCTEFRSVVBeFFBQUFnSUFFMmEyazRjL3M3Y29BRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWjk2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dZOThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2YVM0M0ptUUVBQU4wQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1MyQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnUmFEQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJSHhoQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRwMzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQjBJWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUFBQUFBQUFBQUFBS1NCVDRzQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VVUmxZMnhwYm1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VXTkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazduZkFaY1JnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVEdQQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRzb2pLbVkrQXdBQWt3Y0FBRElBQUFBQUFBQUFBQUFBQUtTQnhwQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHB0WHg1aENBUUFBR2dJQUFERUFBQUFBQUFBQUFBQUFBS1NCVkpRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FBSm1kcE9oZGZKTmRBQ0FBQ0lDUUFBUXdBQUFBQUFBQUFBQUFBQXBJSGxsUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJGQkxCUVlBQUFBQU5nQTJBQ2tUQUFBV21RQUFBQUE9XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOmZhbHNlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJkZW1vLWFwcC1zbWFydC1jb250cmFjdC0xLjEuamFyXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ0MTE3fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE4MjM3NDc2MX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlBPUmV2aWV3IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUE9SZXZpZXdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVGVtcGxhdGUgZmlsZSBmb3IgZW1haWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHdvcmtmbG93IHNlcnZpY2UgZm9yIFB1cmNoYXNlT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4MjYsXCJyZXZpc2lvbklkXCI6XCJjOGI3ODVjNTgzMWVhNjI4ZDkwNzA1NzA4MjBjMzRkNFwiLFwiaXRlbUJ5dGVzXCI6XCJQQ0ZrYjJOMGVYQmxJR2gwYld3K0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWlCNGJXeHVjenAyUFNKMWNtNDZjMk5vWlcxaGN5MXRhV055YjNOdlpuUXRZMjl0T25adGJDSWdlRzFzYm5NNmJ6MGlkWEp1T25OamFHVnRZWE10YldsamNtOXpiMlowTFdOdmJUcHZabVpwWTJVNmIyWm1hV05sSWo0S0NUeG9aV0ZrUGdvSkNUd2hMUzBnVGtGTlJUb2dNU0JEVDB4VlRVNGdMU0JDUVU1RVJVUWdMUzArQ2drSlBDRXRMVnRwWmlCbmRHVWdiWE52SURFMVhUNEtDUWs4ZUcxc1Bnb0pDUWs4YnpwUFptWnBZMlZFYjJOMWJXVnVkRk5sZEhScGJtZHpQZ29KQ1FrOGJ6cEJiR3h2ZDFCT1J5OCtDZ2tKQ1R4dk9sQnBlR1ZzYzFCbGNrbHVZMmcrT1RZOEwyODZVR2w0Wld4elVHVnlTVzVqYUQ0S0NRa0pQQzl2T2s5bVptbGpaVVJ2WTNWdFpXNTBVMlYwZEdsdVozTStDZ2tKUEM5NGJXdytDZ2tKUENGYlpXNWthV1pkTFMwK0Nna0pQRzFsZEdFZ1kyaGhjbk5sZEQwaVZWUkdMVGdpUGdvSkNUeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlsZ3RWVUV0UTI5dGNHRjBhV0pzWlNJZ1kyOXVkR1Z1ZEQwaVNVVTlaV1JuWlNJK0Nna0pQRzFsZEdFZ2JtRnRaVDBpZG1sbGQzQnZjblFpSUdOdmJuUmxiblE5SW5kcFpIUm9QV1JsZG1salpTMTNhV1IwYUN3Z2FXNXBkR2xoYkMxelkyRnNaVDB4SWo0S0NRazhkR2wwYkdVK1NXNWpiMjFwYm1jZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z1VtVjJhV1YzUEM5MGFYUnNaVDRLQ1FrS0NRazhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGdvSkNRa0pjSHNLQ1FrSkNRbHRZWEpuYVc0Nk1UQndlQ0F3T3dvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1hSaFlteGxld29KQ1FrSkNXSnZjbVJsY2kxamIyeHNZWEJ6WlRwamIyeHNZWEJ6WlRzS0NRa0pDWDBLQ1FrSkNXZ3hMR2d5TEdnekxHZzBMR2cxTEdnMmV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pmUW9KQ1FrSmFXMW5MR0VnYVcxbmV3b0pDUWtKQ1dKdmNtUmxjam93T3dvSkNRa0pDV2hsYVdkb2REcGhkWFJ2T3dvSkNRa0pDVzkxZEd4cGJtVTZibTl1WlRzS0NRa0pDUWwwWlhoMExXUmxZMjl5WVhScGIyNDZibTl1WlRzS0NRa0pDWDBLQ1FrSkNXSnZaSGtzSTJKdlpIbFVZV0pzWlN3alltOWtlVU5sYkd4N0Nna0pDUWtKYUdWcFoyaDBPakV3TUNVN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSkNYZHBaSFJvT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWtqYjNWMGJHOXZheUJoZXdvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1dsdFozc0tDUWtKQ1FrdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPbUpwWTNWaWFXTTdDZ2tKQ1FsOUNna0pDUWwwWVdKc1pYc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGJITndZV05sT2pCd2REc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGNuTndZV05sT2pCd2REc0tDUWtKQ1gwS0NRa0pDUzVTWldGa1RYTm5RbTlrZVhzS0NRa0pDUWwzYVdSMGFEb3hNREFsT3dvSkNRa0pmUW9KQ1FrSkxrVjRkR1Z5Ym1Gc1EyeGhjM043Q2drSkNRa0pkMmxrZEdnNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1hBc1lTeHNhU3gwWkN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1cxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9tVjRZV04wYkhrN0Nna0pDUWw5Q2drSkNRbGhXMmh5WldaZVBYUmxiRjBzWVZ0b2NtVm1YajF6YlhOZGV3b0pDUWtKQ1dOdmJHOXlPbWx1YUdWeWFYUTdDZ2tKQ1FrSlkzVnljMjl5T21SbFptRjFiSFE3Q2drSkNRa0pkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9tNXZibVU3Q2drSkNRbDlDZ2tKQ1Fsd0xHRXNiR2tzZEdRc1ltOWtlU3gwWVdKc1pTeGliRzlqYTNGMWIzUmxld29KQ1FrSkNTMXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWw5Q2drSkNRa3VSWGgwWlhKdVlXeERiR0Z6Y3l3dVJYaDBaWEp1WVd4RGJHRnpjeUJ3TEM1RmVIUmxjbTVoYkVOc1lYTnpJSFJrTEM1RmVIUmxjbTVoYkVOc1lYTnpJR1JwZGl3dVJYaDBaWEp1WVd4RGJHRnpjeUJ6Y0dGdUxDNUZlSFJsY201aGJFTnNZWE56SUdadmJuUjdDZ2tKQ1FrSmJHbHVaUzFvWldsbmFIUTZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNXRmJlQzFoY0hCc1pTMWtZWFJoTFdSbGRHVmpkRzl5YzExN0Nna0pDUWtKWTI5c2IzSTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYUmxlSFF0WkdWamIzSmhkR2x2YmpwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxemFYcGxPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRbG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxM1pXbG5hSFE2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDV3hwYm1VdGFHVnBaMmgwT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNTBaVzF3YkdGMFpVTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNXRXViV051UW5WMGRHOXVld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRbDlDZ2tKQ1FrdWJXTnVTVzFoWjJWN0Nna0pDUWtKZG1WeWRHbGpZV3d0WVd4cFoyNDZZbTkwZEc5dE93b0pDUWtKZlFvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MGV3b0pDUWtKQ1hkdmNtUXRZbkpsWVdzNlluSmxZV3N0ZDI5eVpEc0tDUWtKQ1gwS0NRa0pDUzV0WTI1VVpYaDBRMjl1ZEdWdWRDQnBiV2Q3Q2drSkNRa0phR1ZwWjJoME9tRjFkRzhnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNXRZMjVFYVhacFpHVnlRbXh2WTJ0N0Nna0pDUWtKZEdGaWJHVXRiR0Y1YjNWME9tWnBlR1ZrSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKWW05a2VTd2pZbTlrZVZSaFlteGxld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tTW1ZeVpqSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSkkySnZaSGxEWld4c2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURFS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYVhKemRDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSFJvWlNCc1lYSm5aWE4wSUc5bUlIbHZkWElnYUdWaFpHbHVaM011Q2drSkNVQnpkSGxzWlNCb1pXRmthVzVuSURFS0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOakEyTURZd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBCY21saGJDd2dKMGhsYkhabGRHbGpZU0JPWlhWbEp5d2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk16QndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXpkSGxzWlRwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tSnZiR1E3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4bGRIUmxjaTF6Y0dGamFXNW5PaTB4Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFZV2RsQ2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01nb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdZV3hzSUhObFkyOXVaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ01nb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qSTBjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklETUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCMGFHbHlaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ013b0pDUWtxTHdvSkNRa0phRE43Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTRjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdhVzRnZVc5MWNpQmxiV0ZwYkhNdUlGUm9aWE5sSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMjFoYkd4bGMzUWdiMllnZVc5MWNpQm9aV0ZrYVc1bmN5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dOQW9KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakUyY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUhKbGFHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQlRkSGxzWlFvSkNRbEFkR2x3SUZObGRDQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUJoYm1RZ1ltOXlaR1Z5Y3lCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObVptWm1abVk3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTEwYjNBNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxXSnZkSFJ2YlRvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxYUnZjRG95Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pKd2VEc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlGUmxlSFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdkR1Y0ZEM0Z1EyaHZiM05sSUdFZ2MybDZaU0JoYm1RZ1kyOXNiM0lnZEdoaGRDQnBjeUJsWVhONUlIUnZJSEpsWVdRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZMjlzYjNJNkl6WTFOalUyTlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaExDQldaWEprWVc1aExDQlRaV2R2WlN3Z2MyRnVjeTF6WlhKcFpqc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2JHbHVhM011SUVOb2IyOXpaU0JoSUdOdmJHOXlJSFJvWVhRZ2FHVnNjSE1nZEdobGJTQnpkR0Z1WkNCdmRYUWdabkp2YlNCNWIzVnlJSFJsZUhRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElHRXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTlRZMU5qVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCSVpXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1NHVmhaR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWSVpXRmtaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPakl3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pJd2NIZzdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJSFJsZUhRdUlFTm9iMjl6WlNCaElITnBlbVVnWVc1a0lHTnZiRzl5SUhSb1lYUWdhWE1nWldGemVTQjBieUJ5WldGa0xnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZEN3amRHVnRjR3hoZEdWSVpXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pPRGxpWXpVMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlWHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxaWIzUjBiMjA2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxMGIzQTZPWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFdKdmRIUnZiVG94TW5CNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRUp2WkhrS0NRa0pRSE5sWTNScGIyNGdRbTlrZVNCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0IwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCaWIyUjVJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VTQXViV051VkdWNGRFTnZiblJsYm5RZ1lTd2pkR1Z0Y0d4aGRHVkNiMlI1SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNNE9XSmpOVFU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQkdiMjkwWlhJS0NRa0pRSE5sWTNScGIyNGdSbTl2ZEdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2psd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MWliM1IwYjIwNk9YQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVadmIzUmxjZ29KQ1FsQWMyVmpkR2x2YmlCR2IyOTBaWElnVkdWNGRBb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUdadmIzUmxjaUIwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1JtOXZkR1Z5Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFwYmkxM2FXUjBhRG8zTmpod2VDbDdDZ2tKQ1FrdWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhKN0Nna0pDUWtKZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIa3NkR0ZpYkdVc2RHUXNjQ3hoTEd4cExHSnNiMk5yY1hWdmRHVjdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT201dmJtVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGw3Q2drSkNRa0pkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FralltOWtlVU5sYkd4N0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UQndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxld29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhKMFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVWRzl3UTI5dWRHVnVkQ3d1YldOdVVtVmpRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia0p2ZEhSdmJVTnZiblJsYm5Rc0xtMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVKYldGblpVZHliM1Z3UTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2Ymt4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmxKcFoyaDBWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrTmhjSFJwYjI1TVpXWjBTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVVtbG5hSFJKYldGblpVTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia2x0WVdkbFEyRnlaRXhsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeWV3b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkhjbTkxY0VOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp6bzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYQjBhVzl1VEdWbWRFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtOaGNIUnBiMjVTYVdkb2RFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZPWEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1ZHOXdTVzFoWjJWRGIyNTBaVzUwTEM1dFkyNURZWEIwYVc5dVFteHZZMnRKYm01bGNpQXViV051UTJGd2RHbHZibFJ2Y0VOdmJuUmxiblE2YkdGemRDMWphR2xzWkNBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFEyRnlaRUp2ZEhSdmJVbHRZV2RsUTI5dWRHVnVkSHNLQ1FrSkNRbHdZV1JrYVc1bkxXSnZkSFJ2YlRvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVKYldGblpVZHliM1Z3UW14dlkydEpibTVsY25zS0NRa0pDUWx3WVdSa2FXNW5MWFJ2Y0Rvd0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUjNKdmRYQkNiRzlqYTA5MWRHVnlld29KQ1FrSkNYQmhaR1JwYm1jdGRHOXdPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0WW05MGRHOXRPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5c2RXMXVld29KQ1FrSkNYQmhaR1JwYm1jdGNtbG5hSFE2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtUR1ZtZEVsdFlXZGxRMjl1ZEdWdWRDd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUkpiV0ZuWlVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MXlhV2RvZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTndjbVYyYVdWM0xXbHRZV2RsTFhWd2JHOWhaR1Z5ZXdvSkNRa0pDV1JwYzNCc1lYazZibTl1WlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTVFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdacGNuTjBMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRElLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0J6WldOdmJtUXRiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNd29KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSFJvYVhKa0xXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3pld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFSnZlR1ZrSUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliM2hsWkNCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRnVjJVZ2NtVmpiMjF0Wlc1a0lHRWdabTl1ZENCemFYcGxJRzltSUdGMElHeGxZWE4wSURFMmNIZ3VDZ2tKQ1NvdkNna0pDUWt1YldOdVFtOTRaV1JVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrSnZlR1ZrVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCV2FYTnBZbWxzYVhSNUNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCMmFYTnBZbWxzYVhSNUlHOW1JSFJvWlNCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWmIzVWdZMkZ1SUdocFpHVWdhWFFnZEc4Z2MyRjJaU0J6Y0dGalpTNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjbnNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WkdsemNHeGhlVHB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCUWNtVm9aV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSEJ5WldobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliMlI1SUhSbGVIUWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJYWlNCeVpXTnZiVzFsYm1RZ1lTQm1iMjUwSUhOcGVtVWdiMllnWVhRZ2JHVmhjM1FnTVRad2VDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdUV0ZyWlNCMGFHVWdabTl2ZEdWeUlHTnZiblJsYm5RZ2RHVjRkQ0JzWVhKblpYSWdhVzRnYzJsNlpTQm1iM0lnWW1WMGRHVnlJSEpsWVdSaFltbHNhWFI1SUc5dUlITnRZV3hzSUhOamNtVmxibk11Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV6Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pmVHd2YzNSNWJHVStQQzlvWldGa1Bnb0pQR0p2WkhrZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUdHRZWEpuYVc0NklEQTdjR0ZrWkdsdVp6b2dNRHQzYVdSMGFEb2dNVEF3SlRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1R4alpXNTBaWEkrQ2drSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQm9aV2xuYUhROUlqRXdNQ1VpSUhkcFpIUm9QU0l4TURBbElpQnBaRDBpWW05a2VWUmhZbXhsSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDUWs4ZEhJK0Nna0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlHbGtQU0ppYjJSNVEyVnNiQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjRG9nTURzaVBnb0pDUWtKQ1R3aExTMGdRa1ZIU1U0Z1ZFVk5VRXhCVkVVZ0x5OGdMUzArQ2drSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnBaRDBpZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWm1abVpqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklESndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWNISmxhR1ZoWkdWeVEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblFpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE9IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak5qVTJOVFkxTzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yWnZiblF0YzJsNlpUb2dNVEJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxY2lCb1lYWmxJR0VnYm1WM0lHbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzTGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxTR1ZoWkdWeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU1tWXlaakk3WW05eVpHVnlMWFJ2Y0RvZ01EdGliM0prWlhJdFltOTBkRzl0T2lBd08zQmhaR1JwYm1jdGRHOXdPaUF5TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBeU1IQjRPeUkrQ2drSkNRa0pDUWtKUENFdExWdHBaaUJuZEdVZ2JYTnZJRGxkUGdvSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUluUmxiWEJzWVhSbFEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdHRZWGd0ZDJsa2RHZzZJRFl3TUhCNElDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVKYldGblpVSnNiMk5yU1c1dVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnZDJsa2RHZzlJakV3TUNVaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051U1cxaFoyVkRiMjUwWlc1MElpQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklEQndlRHR3WVdSa2FXNW5MV3hsWm5RNklEQndlRHR3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdDBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQR2x0WnlCaGJHbG5iajBpWTJWdWRHVnlJaUJoYkhROUlpSWdjM0pqUFNKb2RIUndjem92TDNCdmNuUmhiQzV3YkdGMFptOXliVFl1YVc4dmMzUmhkR2xqTDJ4dloybHVYM0JoWjJVdmNHeGhkR1p2Y20wMkwyeHZaMjh1Y0c1bklpQjNhV1IwYUQwaU1qWXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF5TmpCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdGthWE53YkdGNU9pQnBibXhwYm1VZ0lXbHRjRzl5ZEdGdWREdDJaWEowYVdOaGJDMWhiR2xuYmpvZ1ltOTBkRzl0TzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHTnNZWE56UFNKdFkyNUpiV0ZuWlNJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFFtOWtlU0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpSa1pHUmtaR08ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXhNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaVltOWtlVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0ZEc5d09pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpZDJsa2RHZzZNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaWJXRjRMWGRwWkhSb09pQXhNREFsTzIxcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkRiMjUwWlc1MElpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRJREU0Y0hnZ09YQjRPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak16TXpNek16TzJadmJuUXRjMmw2WlRvZ01UUndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCc1pXWjBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHZ3pJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME8yUnBjM0JzWVhrNklHSnNiMk5yTzIxaGNtZHBiam9nTUR0d1lXUmthVzVuT2lBd08yTnZiRzl5T2lBak5qQTJNRFl3TzJadmJuUXRabUZ0YVd4NU9pQklaV3gyWlhScFkyRTdabTl1ZEMxemFYcGxPaUF4T0hCNE8yWnZiblF0YzNSNWJHVTZJRzV2Y20xaGJEdG1iMjUwTFhkbGFXZG9kRG9nWW05c1pEdHNhVzVsTFdobGFXZG9kRG9nTVRJMUpUdHNaWFIwWlhJdGMzQmhZMmx1WnpvZ0xURndlRHNpUGtsdVltOTFibVFnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnY21WMmFXVjNQQzlvTXo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4WkdsMklITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJMmxtSUhWelpYSXVabWx5YzNST1lXMWxQejhnSmlZZ2RYTmxjaTVtYVhKemRFNWhiV1UvYUdGelgyTnZiblJsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMmxtSUhWelpYSXViR0Z6ZEU1aGJXVS9QeUFtSmlCMWMyVnlMbXhoYzNST1lXMWxQMmhoYzE5amIyNTBaVzUwUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bWFYSnpkRTVoYldWOUxBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05sYkhObFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM4amFXWStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd2paV3h6WlQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVsYldGcGJIMHNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZJMmxtUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aWNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSldXOTFJR2hoZG1VZ1lTQnVaWGNnYVc1aWIzVnVaQ0JQY21SbGNpQjBieUJ5WlhacFpYY3VJRkJzWldGelpTQThZU0JvY21WbVBTSWtlMmh5WldaOUlpQjBZWEpuWlhROUlsOWliR0Z1YXlJK2JHOW5JRzl1SUdGdVpDQmhZMk5sY0hRZ2IzSWdjbVZxWldOMExqd3ZZVDQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKSm01aWMzQTdQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0OGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdkR0ZpYkdVdGJHRjViM1YwT2lCbWFYaGxaQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3Y0dGa1pHbHVaem9nTlhCNElERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNDMTNhV1IwYURvZ01uQjRPMkp2Y21SbGNpMTBiM0F0YzNSNWJHVTZJRzV2Ym1VN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvZ0kwVkJSVUZGUVR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeHpjR0Z1UGp3dmMzQmhiajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFFvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHTnNZWE56UFNKdFkyNUVhWFpwWkdWeVFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jNklERTRjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGFISWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQnpkSGxzWlQwaVltOXlaR1Z5TFdKdmRIUnZiUzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0YkdWbWRDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRjbWxuYUhRdFkyOXNiM0k2Ym05dVpUc2dZbTl5WkdWeUxXSnZkSFJ2YlMxM2FXUjBhRG93T3lCaWIzSmtaWEl0YkdWbWRDMTNhV1IwYURvd095QmliM0prWlhJdGNtbG5hSFF0ZDJsa2RHZzZNRHNnYldGeVoybHVMWFJ2Y0Rvd095QnRZWEpuYVc0dGNtbG5hSFE2TURzZ2JXRnlaMmx1TFdKdmRIUnZiVG93T3lCdFlYSm5hVzR0YkdWbWREb3dPeUlnTHo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsUm05dmRHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBNWNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHNpUGdvSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSjBaVzF3YkdGMFpVTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdiV0Y0TFhkcFpIUm9PaUEyTURCd2VDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW1admIzUmxja052Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYXlJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTBsdWJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0YkdWbWREb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZENJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdVlXMWhiSFJ2TG1OdmJTOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdVptRmpaV0p2YjJzdVkyOXRMMkZ0WVd4MGIzUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdFptRmpaV0p2YjJzdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1YkdsdWEyVmthVzR1WTI5dEwyTnZiWEJoYm5rdllXMWhiSFJ2TFhSbFkyaHViMnh2WjJsbGN5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0OGFXMW5JSE55WXowaWFIUjBjRG92TDJOa2JpMXBiV0ZuWlhNdWJXRnBiR05vYVcxd0xtTnZiUzlwWTI5dWN5OXpiMk5wWVd3dFlteHZZMnN0ZGpJdlkyOXNiM0l0YkdsdWEyVmthVzR0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5MGQybDBkR1Z5TG1OdmJTOUJiV0ZzZEc4aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWFIzYVhSMFpYSXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREE3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1ZVc5MWRIVmlaUzVqYjIwdlkyaGhibTVsYkM5VlF6bFhXQzFxUldGRFdHMDRWRll6Y21SalEyazNZM2NpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxYbHZkWFIxWW1VdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0MFlXSnNaUzFzWVhsdmRYUTZJR1pwZUdWa0lDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdHdZV1JrYVc1bk9pQTFjSGdnTVRod2VDQXlNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ6YjJ4cFpEdGliM0prWlhJdGRHOXdMV052Ykc5eU9pQWpSVVZGUlVWRk8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSE53WVc0K1BDOXpjR0Z1UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdENna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNVGh3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9jaUJqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJSE4wZVd4bFBTSmliM0prWlhJdFltOTBkRzl0TFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxc1pXWjBMV052Ykc5eU9tNXZibVU3SUdKdmNtUmxjaTF5YVdkb2RDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRZbTkwZEc5dExYZHBaSFJvT2pBN0lHSnZjbVJsY2kxc1pXWjBMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXlhV2RvZEMxM2FXUjBhRG93T3lCdFlYSm5hVzR0ZEc5d09qQTdJRzFoY21kcGJpMXlhV2RvZERvd095QnRZWEpuYVc0dFltOTBkRzl0T2pBN0lHMWhjbWRwYmkxc1pXWjBPakE3SWlBdlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclQzVjBaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nT1hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlITjBlV3hsUFNKM2FXUjBhRG94TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTVRBd0pUdHRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUF3TzNCaFpHUnBibWN0Y21sbmFIUTZJREU0Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHdZV1JrYVc1bkxXeGxablE2SURFNGNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8zZHZjbVF0WW5KbFlXczZJR0p5WldGckxYZHZjbVE3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Wm05dWRDMXphWHBsT2lBeE1uQjRPMnhwYm1VdGFHVnBaMmgwT2lBeE5UQWxPM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdJajVRYkdWaGMyVWdaRzhnYm05MElISmxjR3g1SUhSdklIUm9hWE1nWlMxdFlXbHNMaUJVYUdVZ2MyVnVaR1Z5SUdWdFlXbHNJR0ZrWkhKbGMzTWdhWE1nYm05MElHMXZibWwwYjNKbFpDNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pSbTl5SUdGdWVTQnhkV1Z6ZEdsdmJpd2djR3hsWVhObElEeGhJR2h5WldZOUltMWhhV3gwYnpwamIyNTBZV04wUUhCc1lYUm1iM0p0Tmk1cGJ5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHQwWlhoMExXUmxZMjl5WVhScGIyNDZJSFZ1WkdWeWJHbHVaVHNpUG5ObGJtUWdkWE1nWVNCdFpYTnpZV2RsUEM5aFBpNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6ZEhKdmJtYytVR3hoZEdadmNtMGdOaUJpZVNCQmJXRnNkRzhnVkdWamFHNXZiRzluYVdWelBDOXpkSEp2Ym1jK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNjS3BKbTVpYzNBN0pIc3VibTkzUDNOMGNtbHVaeTU1ZVhsNWZTWnVZbk53TzBOdmNIbHlhV2RvZEM0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNDhMMlJwZGo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRazhMM1J5UGdvSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1R3aExTMGdMeThnUlU1RUlGUkZUVkJNUVZSRklDMHRQZ29KQ1FrOEwzUmtQZ29KQ1R3dmRISStDZ2s4TDNSaFlteGxQZ29KUEM5alpXNTBaWEkrQ2p3dlltOWtlVDRLUEM5b2RHMXNQZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjUxMjY2fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU5ODgyNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1MDcsXCJyZXZpc2lvbklkXCI6XCJkMWZhY2FkMDlkMWI2MjVkZDA3ZTM2NWIxY2NkMTE1YlwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvVHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkFwcGxpY2F0aW9uXFxcIiBhbmQgVmFsdWU9XFxcInA2X2RlbW9cXFwiXScgLCBjb250ZW50KTtcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcInRhcmdldERhdGFTb3VyY2VOYW1lXCI6bnVsbCxcImRlZmluZWRQYXJhbWV0ZXJzXCI6e30sXCJjYWNoaW5nT3ZlcnJpZGVcIjpmYWxzZSxcImFwcGVuZFRhcmdldERhdGFTb3VyY2VcIjpmYWxzZX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MDd9XX0=", "enabled": false, "version": "0.10.0", "installed": false, "signature": "hC51RvJEqT35PFeY6VdDDc7EiEZGGqshvJCdidPZXYPkHjApL6L+ddV0qL5t8tqE8hzb9aS6Rtt5aPKkgxuZeibkedDvTou+4chv/4xLMdXJlQJESxBik+als34DHQMHcZ1hTpka3OlXhU+exYJ6ZUPBcpzNxXa/NxyK+HkRa60=", "createDate": 1567442840607, "expiryDays": 0, "revisionId": "0377893acaab5a33abea7634981e39fb", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1568905076402, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-beta-1", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1568905076437 +\. + + +-- +-- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.activeroutingorder + ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.completedroutingorder + ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.failedroutingorder + ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.flyway_schema_history + ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank); + + +-- +-- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.transaction + ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4); + + +-- +-- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.rawbytes + ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2); + + +-- +-- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.serviceconfig + ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100'); + + +-- +-- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success); + + +-- +-- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); + + +-- +-- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); + + +-- +-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype); + + +-- +-- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops); + + +-- +-- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype); + + +-- +-- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text)); + + +-- +-- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text)); + + +-- +-- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres +-- + +GRANT ALL ON DATABASE b2box TO b2box; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1) +-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +DROP DATABASE postgres; +-- +-- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE postgres OWNER TO postgres; + +\connect postgres + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE postgres IS 'default administrative connection database'; + + +-- +-- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA b2head; + + +ALTER SCHEMA b2head OWNER TO postgres; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database cluster dump complete +-- +